Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我的代码只有在输入值低于31[ProjectEuler100]的情况下才起作用_Python_Primes - Fatal编程技术网

Python 我的代码只有在输入值低于31[ProjectEuler100]的情况下才起作用

Python 我的代码只有在输入值低于31[ProjectEuler100]的情况下才起作用,python,primes,Python,Primes,问题来自Euler100项目 我的代码应该找到n以下的素数之和 只有当n小于31时,它才能正常工作 当n为32时,我仍然得到129,当n为2001时,我仍然得到129。 (29以下包含29的素数之和为129,因此如果n为32,则应返回160。) 我不明白为什么。。。 这是我的代码(python) #除2和3外,素数以6k±1的形式书写。(编辑) 输入数学 def是_素数(数字): 对于范围内的i(2,int(数学sqrt(数字))+1): 如果编号%i==0: 返回错误 其他: 持续 返回真值

问题来自Euler100项目

我的代码应该找到n以下的素数之和

只有当n小于31时,它才能正常工作

当n为32时,我仍然得到129,当n为2001时,我仍然得到129。 (29以下包含29的素数之和为129,因此如果n为32,则应返回160。)

我不明白为什么。。。 这是我的代码(python)


#除2和3外,素数以6k±1的形式书写。(编辑)
输入数学
def是_素数(数字):
对于范围内的i(2,int(数学sqrt(数字))+1):
如果编号%i==0:
返回错误
其他:
持续
返回真值
def prime_总和(n):
素数和=0
素数i=[5,7]
如果int(n)==3:
素数和=2
elif int(n)<5和int(n)>3:
素数和=5
elif int(n)>=5:
素数和=5#2+3=5
对于素数i中的素数:
当素数
在我看来,如果您这样重写它,它似乎是可行的(如果遇到任何非素数的伪素数,例如25,请不要在时中断-loop)

def prime_总和(n):
n=int(n)
素数i=[5,7]
素数和=0
如果n==3:
素数和=2
elif n==4:
素数和=5
如果n>=5:
素数和=5#2+3=5
对于素数i中的素数:
当素数
使用Go编写的相同解决方案:

包问题10
进口(
“日志”
“数学”
“github.com/alesiosavi/GoGPUtils/helper”
mathutils“github.com/alesiosavi/GoGPUtils/math”
)
//iPrime被授权验证给定的数字是否为素数
函数IsPrime(n int)bool{
如果n1
}如果n%2==0 | | n%3==0,则为else{
返回错误
}
i:=5
mult:=64(2)
对于int(math.Pow(float64(i),mult))[1,3,5]-->9
log.Println(mathutils.SumIntArray(prime))
}

我找到了答案,伙计们,哈哈 因为我这样设置
while
循环的条件:
whileprime

它在25(25=6*4+1)之后停止循环

我将代码更改为:

 while prime < int(n):
                if is_prime(prime):
                    prime_sum += prime
                prime += 6
当素数

而且它有效

不是形式为
6k±1
伪素数的整数吗?6*4+1=25,这显然不是素数。每个素数都可以写成6k±1,但不是每个整数i=6k±1都是素数。@vonludi是的。我写了一篇关于素数的错误声明。我的错。并非每6k±1是一个素数。这就是为什么我使用
is_prime
检查数字是否为素数。打印出找到的素数,并检查是否将所有素数相加到n?如果没有,你需要调试…@PaulHankin是的,这就是我发现bug的原因!无论如何,谢谢你;)对于整数,
elif 3
实际上意味着
elif n==4:
就像原始问题中的
elif int(n)<5和int(n)>3:
一样。我在这里没有改变问题中代码的逻辑,所以我看不到你评论的要点。我的观点是你对原始代码进行了改进(更改数字的比较方式),但您可以通过进行显式比较来进一步改进它,就像
如果n==3:
lineI现在包含了您的反馈。这并不能解释发布的代码不起作用的原因,甚至与原始问题的语言也不相同。提问者可能甚至不知道go语言只是用于算法POV。如你可以看到,这里只有数学。没有使用特殊的“魔法”库。由于问题的复杂性较低,你可以将其视为伪代码。
 while prime < int(n):
                if is_prime(prime):
                    prime_sum += prime
                prime += 6