歌德巴赫猜想
数学上经常有一些猜想,这些问题的严格数学证实是很繁琐的,但是用计算机却能很轻
松地进行验证。
下面的一个程序可以验证2000以内的正偶数都能分解成二个素数之和,即验证歌德巴赫猜
想在2000范围内的正确性。
方法: 先将整数分解成二部份,然后判定二个素数是否均为素数,若是则满足题意
,否则需要重新分解和判定。
判定一个数是否为素数有很多方法,从定义上说,判定一个整数n是否为素数就是要
判定其是否能除1和n之外任意整数整除;若都不能整除,则n为素数。
在程序里不必从1到n-1的数一个个去试,只用从2开始到该整数的一半去试即可,这
样可以大缩短判定的时间。
代码如下:
#include<stdio.h>
su(int n)
{ int i;
for(i=2;i<=(n-1)/2;i++)
if(n%i==0)
return 0; /*不是素数,返加0*/
return 1; /*否则返回1*/
}
main()
{ int i,n;
for(i=4;i<=2000;i+=2) /*判定的数为4到2000的正偶数*/
{ for(n=2;n<i;n++)
if(su(i-n))
{ printf("%d=%d+%d\n",i,n,i-n); 假如均为素数,打印该等式并退出循环*/
break;
}
if(n==i)printf("error %d\n",i); /*假如不成立,打印出错信息*/
}
}
部分运行结果如下:
1990=3+1987
1992=5+1987
1994=7+1987
1996=3+1993
1998=5+1993
2000=3+1997
------------------------------------------------------------
回文素数
素数一直是数学喜欢讨论的题目,在素数家族中,有一类非凡的素数称为回文素数,
所谓回文素数是指对一个整数n从左到右和从右到左读其结果什相同且都为素数,即
称该整数n为回文素数。现在编一个程序找到1000的回文素数。
因为不超过1000的整数可以表示成:
100*i+10*j+k
其中i,j,k均为整数,因此该整数的反序可以写成:
100*k+10*j+i
但是有二种非凡情况需要考虑,即一位数和二位数的反序数应该仍保持位数不变,例
如,12的反序应该为21而不是210。
#include<stdio.h>
su(int n)
{ int i;
for(i=2;i<=(n-1)/2;i++)
if(n%i==0) /*不是素数返回0*/
return 0;
return 1; /*否则返回1*/
}
main()
{
int i,j,l,k,s;
printf("Palindrome primes not greater than 1000:\n");
for(i=0;i<=9;i++) /*枚举百位数所有可能情形*/
for(j=0;j<=9;j++) /*枚举十位数所有可能情形*。
for(k-0;k<=9;k++) /*枚举个位数所有可能情形*/
{ s=i*100+j*10+k;
l=k*100+j*10+i; /* l为要的反序数*/
if(i==0&&j==0) l/=100; /*处理二种非凡情形*/
else if(i==0) l/=10;
if(s>10&&s==l&&su(s)) /*假如二数均为素数,打印该数*/
printf("%d\t",s);
}
}
运行结果:
Palindrome primes not greater than 1000:
11 101 131 151 181 191 313 353
373 727 757 787 797 919 929
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |