我已经尝试this问题,但无法得到正确的答案。任何人都可以帮助我在我的代码中发现问题吗?
我的逻辑:使用seive,创建了素数列表。使用这个素数列表我只是粗暴强迫解决方案。
import math
n = 50000000
exponent = (2, 3, 4)
prime_numbers = [True]*n
prime_numbers[0] = False
prime_numbers[1] = False
max_prime = 2
#prime number creation
for i in range(2, int(math.sqrt(n))+1):
if prime_numbers[i]:
for j in range(i*i, n, i):
prime_numbers[j] = False
# list of prime numbers
list_data = []
for i in range(2, n):
if prime_numbers[i]:
if i**2 >= n:
break
list_data.append(i)
count = 0
for i, i_data in enumerate(list_data):
if i_data**4 >= n:
break
for j, j_data in enumerate(list_data):
if j_data**3 >= n:
break
for k, k_data in enumerate(list_data):
if k_data**2 >= n:
break
if (k_data**2 + j_data**3 + i_data**4) < n:
count += 1
print(count)
答案 0 :(得分:1)
我从未从您的代码中获得输出。我没有等到筛子完成。
一些提示:
筛子很慢。考虑到你需要的最大素数是50,000,000的平方根,你可以大大加快它。
无需使用enumerate
。 <{1}},i
,j
永远不会被使用。
您正在计算重复项。使用k
存储找到的唯一值。
考虑到上述情况,我在几秒钟内得到了正确答案,因此算法无效。