#include<stdio.h>
int main()
{ int i,j,n,m
scanf("%d",&n)
for(m=0nn/=10)m=m*10+n%10
if(m>1)printf("2 ")
for(i=3i<=mi+=2)
{ for(j=3j*j<=ij+=2)
if(i%j==0)j=i
if(j*j>i)printf("%d ",i)
}
return 0
}
为大家分享了多种方法求质数python实现代码,供大家参考,具体内容如下题目要求是求所有小于n的质数的个数。
求质数方法1:
穷举法:
根据定义循环判断该数除以比他小的每个自然数(大于1),如果有能被他整除的就不是质数:
def countPrimes1(self, n):
"""
:type n: int
:rtype: int
"""
if n<=2:
return 0
else:
res=[]
for i in range(2,n):
flag=0 # 质数标志,=0表示质数
for j in range(2,i):
if i%j ==0:
flag=1
if flag==0:
res.append(i)
return len(res)
求质数方法2:
利用定理:如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。所以判断一个数是否是质数,只需判断它是否能被小于它开根后的所有数整除。这样做的运算会少很多。
def countPrimes2(self, n):
if n<=2:
return 0
else:
res=[]
for i in range(2, n):
flag=0
for j in range(2, int(math.sqrt(i))+1):
if i % j == 0:
flag = 1
if flag == 0:
res.append(i)
return len(res)
求质数方法3:
利用定理:如果一个数是合数,那么它的最小质因数肯定小于等于它的平方根。我们可以发现只要尝试小于等于平方根的所有数即可。列举从 3 到根号x的所有数,还是有些浪费。比如要判断101是否质数,101的根号取整后是10,需要尝试的数是1到10。但是可以发现,对9的尝试是多余的。不能被3整除,必然不能被9整除……顺着这个思路走下去,其实,只要尝试小于根号x的质数即可。而这些质数,恰好前面已经算出来了,已经存在res中了。
def countPrimes3(self, n):
if n <= 2:
return 0
else:
res = []
for i in range(2, n):
flag = 0
for j in res:
if i % j == 0:
flag = 1
if flag == 0:
res.append(i)
return len(res)
希望对大家有帮助
#include "stdafx.h"
int main(int argc, char* argv[])
{
int a=0
int b=2
int i=0
int n1=0
int n2=0
printf("请输入所要求哪个范围的质数\n")
scanf("%d %d",&n1,&n2)
for(a=n1a<=n2a++)
{
for(b=2b<=a-1b++)
if(a%b==0) break
if(a<=b)
printf("质数: %d\n",a)
}
printf("\n")
return 0
}
3
输入你所要求某个范围的质数,两个数用【空格键】隔开。如输入"180 200",
输出:
质数: 181
质数: 191
质数: 193
质数: 197
质数: 199
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)