网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.轻轻松松从C一路走到C++系列文章.
.程序员必读的《C++程序设计陷阱》.
.Unix下用C编写类Windows菜单.
.键盘谍影 键盘监视器的原理和防范.
.将Wav格式压缩成Mp3.
.C++ SDK+Symbian开发入门之部署.
.Windows Socket1.1 程序设计.
.C++的iostream标准库介绍(2).
.Visual C++ 入门精解-第三部分.
.多变的立方体.
.用OLE操作Excel(Wangda补充).
.Windows编程基础 - 设.
.C语言初学者入门讲座 第十四讲 枚.
.链表的c语言实现(六).
.水滴石穿C语言之声明的语法.
.VC++中利用磁盘序列号识别正版软.
.使用 C++ Builder&nbs.
.拼图游戏.
.数据库程序的精简安装.
.Net是未来的趋势吗?.

费尔马二平方素数

发表日期:2008-3-8



  费尔马“二平方”素数     问题的提出除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 后将其保存起来,在判定其它数是否素数时可直接用已求出的素数去除,如此反复。
源程序
#include<math.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(m>x) 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("\n");
    13:m1=m2+4; m2=a[++d]*a[d]-2;
    goto 10;
    14:printf("\ntotal=%lu\n",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);


上一篇:分而治之算法---残缺棋盘 人气:812
下一篇:非缓冲文件系统 人气:485
浏览全部C/C++的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐