1.整除取余分离各位
import time def separate(num): #将一个数的每一位分离并储存在一个列表中 a = [] while num != 0: a.append(num % 10) num = num // 10 a.reverse() return a bg = time.time() for i in range(100,10000000): A = separate(i) #分离 n = len(A) #求数的位数 sum = 0 for x in A: sum += x**n if sum == i: print(i) ed = time.time() print("用时%ds"%(ed-bg))
运行用时47s。
2.转化为字符串分离
import time def separate(num): num = str(num) num = list(num) a = [] for i in num: a.append(int(i)) return a bg = time.time() for i in range(100,10000000): A = separate(i) n = len(A) sum = 0 for x in A: sum += x**n if sum == i: print(i) ed = time.time() print("用时%ds"%(ed-bg))
运行用时58s
两种方式耗时好像区别不大
3.再用c试一下
#include <stdio.h> #include <math.h> int main() { long num; for(num = 100; num <= 9999999; num++) { int a[7],i=0,x; long sum = 0,n = num; while(n != 0) { a[i] = n % 10; n = n / 10; i++; } for(x = 0;x < i;x++) { sum += powf(a[x],i); } if (sum == num) printf("%ld\n",num); } return 0; }
运行时间6.344s,快了好多😂
浙公网安备 33010602011771号