判断素数
一般版
int prime(int p) //素数判断
{
int i;
int isPrime = 1;
for(i=2;i<p;i++)
{
if(p%i==0)
{
isPrime=0;
break;
}
}
return isPrime;
}
改进版
int Enprime( int p ) //加强版判断素数法
{
int isprime = 1;
if ( p == 1 ||
(p%2 == 0 && x!=2 ) )
{
isprime = 0;
}
int i;
for ( i=3; i<sqrt(p); i+=2)
{
if (p%i == 0)
isprime = 0;
break;
}
return isprime;
}
计算机版
void creatprime( int p ) //构造含p位数的素数表 ,应用数组
{
int i,x;
int a[p];
for( i=0; i<p; i++) {
a[i] = 1;
}
for( x=2; x<p; x++) {
if( a[x] ) {
for( i=2; i*x<p; i++) {
a[i*x] = 0;
}
}
}
//打印
for ( i=2; i<p; i++ ) {
if ( a[i] ) {
printf("%d\t",i);
}
}
printf("\n");
}
应用
验证哥德巴赫猜想
void Goldbach( int n )
{
int p;
for(p=2;p<n;p++)
{
/* if ( prime(p) != 0 ) //设置两个参数
{
q = n-p;
if ( prime(q) != 0)
{
printf("n=%d+%d",p,q);
break;
}
}
*/
if ( prime(p) && prime(n-p) )
{
printf("%d = %d + %d",n,p,n-p);
break;
}
}
}
感想
有的时候并不是我们真的无法理解知识,或许是当时的环境,或许是老师教的方式,换种方式,或许会收获不一样的风景。
学无止境,感谢中国MOOC。