C语言求1到n所有质数

C语言求1到n所有质数,第1张

#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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9938021.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存