Python 不使用mod查找素数(%)

Python 不使用mod查找素数(%),python,python-3.x,prime-factoring,Python,Python 3.x,Prime Factoring,我正在尝试编写一个简单的(非常简单,我是一个非常新的初学者)代码,在不使用mod的情况下查找100后的前10个素数。我在网上发现x%I与(x-(I*(x/I))==0是一样的,但我得到一个错误,说我在按0跳水 x=100 i=1 for i in range (150): if (x-(i*(x/i))==0): x=x+1 i=1 else: i=i+1 if (i==(x-1)): x=x+1

我正在尝试编写一个简单的(非常简单,我是一个非常新的初学者)代码,在不使用mod的情况下查找100后的前10个素数。我在网上发现x%I与(x-(I*(x/I))==0是一样的,但我得到一个错误,说我在按0跳水

x=100

i=1

for i in range (150):

    if (x-(i*(x/i))==0):
        x=x+1
        i=1
    else:
        i=i+1
    if (i==(x-1)):
        x=x+1
        i=1
        print (x)

range函数从0开始。因此您的'i'变量是从0-149开始的。即使在for循环之前设置i=1,范围也将从0开始。我猜您想要1-150,因此将其更改为:

for i in range(1, 151):

寻找大量素数的最好方法不是使用mod,而是使用mod,这是一种消除复合数(留下素数)的方法

生成数字是否为素数的“真/假”列表的简单实现可能是:

lim=500+1
#设置初始条件,所有假设为素数
isaprime=[True]*lim
isaprime[0]=假
isaprime[1]=假
#大于2的偶数不是素数
对于范围内的m(4,lim,2):
isaprime[m]=假
#非素数的其他素数的奇数倍数
k=3

你到底为什么不使用mod呢?与其试图避免使用mod,因为它会给你一个错误,不如试着去理解到底出了什么问题。下面有一个很好的答案。你也可以阅读
/
(aka
truediv
)和
/
(aka
floordiv
)之间的区别希望你对数学不是新手:想想如果(x-(i*(x/i))==0运行的那条线。首先你用“i”乘以“x”,然后用“i”除以“x”,然后减去“x”,因此剩下0。基本上你是说如果0==0,那么做x=x+1,i=1。0总是等于0。你知道问题在哪里了吧。。。。(如果不是:我永远不会等于x-1,即使是这样,我也不知道这会告诉你什么与素数有关感谢所有帮助我的人!顺便说一句,我没有使用mod,因为这就是分配的内容。)