python100以内素数之和,python1000以内的素数之和

  python100以内素数之和,python1000以内的素数之和

  当n可以达到~ 10 ^ 230时,我求小于n的最大素数有什么问题?有没有更好的办法?在

  下面是我在Python中使用以下版本的米勒-拉宾素数测试的尝试:从随机导入randrange

  小素数=[

  2, 3, 5, 7, 11, 13, 17, 19, 23, 29,

  31, 37, 41, 43, 47, 53, 59, 61, 67, 71,

  73, 79, 83, 89, 97,101,103,107,109,113,

  127,131,137,139,149,151,157,163,167,173,

  179,181,191,193,197,199,211,223,227,229,

  233,239,241,251,257,263,269,271,277,281,

  283,293,307,311,313,317,331,337,347,349,

  353,359,367,373,379,383,389,397,401,409,

  419,421,431,433,439,443,449,457,461,463,

  467,479,487,491,499,503,509,521,523,541,

  547,557,563,569,571,577,587,593,599,601,

  607,613,617,619,631,641,643,647,653,659,

  661,673,677,683,691,701,709,719,727,733,

  739,743,751,757,761,769,773,787,797,809,

  811,821,823,827,829,839,853,857,859,863,

  877,881,883,887,907,911,919,929,937,941,

  947,953,967,971,977,983,991,997

  ]

  def probably_prime(n,k):

  如果n通过了k轮Miller-Rabin素性,则返回True

  测试(而且很可能是质数)。如果n被证明为,则返回False

  复合材料。

  如果n 2:返回False

  对于小素数中的p:

  if n p * p:返回True

  如果n % p==0:返回False

  r,s=0,n - 1

  而s % 2==0:

  r=1

  s //=2

  对于范围内的(k):

  a=randrange(2,n - 1)

  x=功率(a,s,n)

  如果x==1或x==n - 1:

  继续

  for _ in范围(r - 1):

  x=pow(x,2,n)

  如果x==n - 1:

  破裂

  否则:

  返回False

  返回True

  我从测试possible _ prime(n)开始,在这里我递减并测试n的每个值,直到我得到一个“近似的素数”。当我测试n=~ 10 230的值时,我发现素数被20-30个数字隔开。看了更多关于素数差距的文章,我的结果好像不太可能,因为我不应该这么经常找素数。我测试了高达5万的K值,得到了同样的答案。我做错了什么?有没有更好的解决办法?在

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: