思路
- 因为1比较特殊,是素数,所以小于等于1的数都返回false
- 从2开始除,因为若i的平方已经大于n了,则n必定无法被i整除了,所以一定不为素数
算法
C++
int shu(int j){
if(n<=1)return 0;
for(int i = 2;i*i<=j;i++)
{
if(j%i==0)return 0;
}
return 1;//这个一定要放在外面,否则%2不为0时就直接结束循环了
}
int main(){
//只循环1-200的数
for(int j=1;j<200;j++){
if(shu(j)){
cout<<j<<endl;
}
}
system("pause");
}
python
因为python在for循环上有很大区别,python的for循环无法实现i动态小于n的情况,所以按照情况分开讨论更加方便
- 第一种情况相同
- 2.3都为素数排除
- 整除2.3的都排除
- 剩下的需要排除能被奇数整除的情况了
- 同样i*i<=n
- 5、7、
9(9%3==0)、11(5+6)、13、17(11+6)、19、23(17+6)……
n = int(input())
def prime(n):
if n<=1:return False
if n<=3:return True
if n%2==0 or n%3==0:return False
i=5
while i*i<=n:
if n%i==0 or n%(i+2)==0:
return False
i+=6
return True
print(prime(n))