费尔马二平方素数

2016-02-19 13:06 20 1 收藏

今天图老师小编给大家介绍下费尔马二平方素数,平时喜欢费尔马二平方素数的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

费尔马“二平方”素数    问题的提出除2这个非凡的素数外,所有的素数都可以分成两类:第一类是被4除余1的素数,如5,13,17,2937,41;第二类是被4除余3的素数,如3,7,11,19,23,31。第一类素数都能表示成两个整数的平方和(第二类则不能)。
    例如:5=1-1+2*213=2*2+3*317=1*1+4*4  29=2*2+5*5这就是闻名的费尔马“二平方”定理。有趣的是:上述等式右侧的数有的又恰恰是两个素数的平方,如13,29的表达式,我们起名叫作费尔马“二平方”素数,即假如一个素数能够表示成两个素数的平方和的形式:F=X*X+Y *Y (1)其中F、X、Y 都是素数,它就是费尔马“二平方”素数。
    编程思路本文拟用c 语言编程,求42亿之内的费尔马“二平方”素数。假如按定义从左向右,先求一个素数F,然后再去找相应的素数X、Y ,工作量重复太大。我们可以对上述公式进行分析:
    1、左侧F 是素数,它肯定是奇数,那么右侧两式的和也应该是奇数,这样X 和Y 为一奇一偶,因为奇数的平方还是奇数,偶数的平方还是偶数。X、Y 又要求是素数,而既是偶数又是素数的数只有一个,就是2。我们假定X=2。所以(1)式可以简化为:F=2*2+Y *Y(2)也就是说,费尔马“二平方”素数的表示形式是惟一的。
    2、按式(2)由右向左,由小到大找素数Y ,再计算出相应的F,判定其是否素数。
    3、求出素数Y 后将其保存起来,在判定其它数是否素数时可直接用已求出的素数去除,如此反复。
  源程序
  #includemath.h
  void main()
  {
      unsigned long i,j,a[10000],m,m1=3,m2=7,b=1,n=0,d=1,x=4000000000;
      a[1]=2;
  10:for(i=m1;i=m2;i++,i++)
  {
      if(i%a[1]==0) goto 13;
      for(j=2;j=d-1;j++)
      if(i%a[j]==0) goto 13;
      a[b++]=i; m=i*i+4;
      if(mx) goto 14;
      for(j=2;j=b-2;j++)
      if(m%a[j]==0) goto 13;
      printf("%20lu=2*2+%5lu*%5lu",m,i,i);
      if(++n%2==0) printf("");
      13:m1=m2+4; m2=a[++d]*a[d]-2;
      goto 10;
      14:printf("total=%lu",n);
  }
  结论
  运行程序会发现,除“29=2*2+5*5”以外,所有的费尔马“二平方”素数个位数字都是3,相应Y 的个位数字都是3或7。费尔马“二平方”素数分布(修改程序中变量x 的值得到)也很耐人寻味,请看下表(表中10万以内包含1万以内,下同):
  范围个数最大的一个的表达式
  1万109413=2*2+97*97
  10万2097973=2*2+313*313
  100万42994013=2*2+997*997
  1000万769223373=2*2+3037*3037
  1亿18397752773=2*2+9887*9887
  10亿427999002453=2*2+31607*31607
  20亿5511983188093=2*2+44533*44533
  30亿6412993512373=2*2+54713*54713
  40亿7183977446493=2*2+63067*63067
  费尔马“二平方”素数太少了,40亿内才718个,千万分之二还不到呢。
    随着数的范围的增大,似乎越来越稀少,但再往后永远是这样吗?会不会在某个范围内反而又稠密起来呢?
    费尔马“二平方”素数是无穷多个呢,还是有限多个呢?假如是有限个,又是多少个呢?最大的一个又是什么数呢?
    这些问题的证实可能很简单,也许很复杂,真说不定会成为像“哥德巴赫猜想”那样的谜呢!
  ----------------------------------------------------------------------
  下面是作者原程序,因为是中文全角,上面的就改了一下原文放在下面对照:
  #include″math .h″
  main()
  {unsigned longi ,j ,a[10000],m,m1=3,m2=7,b =1,n =0,d =1,x=4000000000;
  a[1]=2;
  l0:for (i =m1;i <=m2;i ++,i ++)
  {if (i %a[1]==0)goto l3;
  for (j =2;j <=d -1;j ++)
  if (i %a[j]==0)goto l3;
  a[b ++]=i ;m=i *i +4;
  if (m>x)goto l4;
  for (j =2;j <=b -2;j ++)
  if (m%a[j]==0)goto l3;
  printf(″%20lu =2*2+%5lu *%5lu″,m,i ,i);
  if (++n %2==0)printf(″\n″);
  l3:;}m1=m2+4;m2=a[++d]*a[d]-2;
  goto l0;
  l4:printf(″\ntotal =%lu\n″,n);
  }
  

来源:http://www.tulaoshi.com/n/20160219/1602957.html

延伸阅读
装饰Tips:舒服的浅灰色沙发,搭配浅灰色的大地毯,给人温馨自然的感觉。 装饰Tips:深灰色的靠枕很好的点缀了浅灰色系列的家具,玻璃设计的正方形茶几简单而时尚。 装饰Tips:壁炉式设计给人温暖的家庭感,反光的背景墙设计时尚而大气。 装饰Tips:仔细观察壁炉,真...
户主: K先生 居住人口:3人 面积:80平方米 楼龄:50年 地点:日本神奈川县 装饰Tips:落地窗,美观大气,使得空间的气质一下子就提升起来。白色的格子收纳柜,使得物品的摆放一目了然,方便主人拿取。水晶吊灯,显得高贵大气。 装饰Tips:玻璃的拉门,使得空间...
标签: 电脑入门
一、SUMSQ函数语法 返回参数的平方和。 语法 SUMSQ(number1,number2, ...) Number1, number2, ... 为 1 到 30 个需要求平方和的参数,也可以使用数组或对数组的引用来代替以逗号分隔的参数。 二、SUMSQ实例 比如公式:=SUMSQ(3, 4),返回的结果为25。 函数分析:返回的是3的平方和4的平方之和,即9加上16,自然就等于25了; 再比如:=SU...

经验教程

19

收藏

60
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部