C语言编程:用筛选法求100之内的素数,
#include <math.h>
void main()
{ int i,t,m;
for(m=1;m<=100;m=m+2)
{ t=sqrt(m);
for(i=2;i<=t;i++)
if(m%i==0) break;
if(i>t) printf("%d is a prime number .\n",m);
else printf("%d is not a prime number .\n",m);
}
getchar();
}
这是运行结果 ,高手帮我看看哪里出现了错误 ,谢谢大家! 展开
源代码如下:
#include <stdio.h>
#include <math.h>
int main()
{
int a, b, i, flag;
printf("输入两个整数: ");
scanf("%d %d", &a, &b);
printf("%d与%d之间的素数为: ", a, b);
while(a<b)
{
flag=0;
for(i=2; i<=sqrt(a); i++)
{
if(a%i==0)
{
flag=1;
break;
}
}
if(flag==0)
printf("%d ", a);
a++;
}
return 0;
}
扩展资料
一个偶数总能表示为两个素数之和的源代码如下:
#include "stdio.h"
#include "math.h"
main()
{
int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{
for(c=2;c<=sqrt(b);c++)
if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
else
break;
for(c=2;c<=sqrt(d);c++)
if(d%c==0)
break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);
}
}
for(int i=5;i<=sqrt(x);i+=6)
if(x%i==0||x%(i+2)==0)
{
printf("%d不是素数",x);
return 0;
}
printf("%d是素数",x);
return 0;
}
#include "stdafx.h"
#define A 100
#include <stdio.h>
void main()
{
int i,j;
int array[A];
for (i=0;i<A;i++)
array[i]=i+1;
for (i=0;i<A;i++)
{
if( array[i]!=1 )
{
for(j=i+1;j<A;j++)
{
if( array[j]%array[i]==0)
array[j]=1;
}
}
}
j=0;
for(i=0;i<A;i++)
{
if(array[i]!=1)
{
printf("%4d",array[i]);
j++;
if (j%5==0) putchar('\n');
}
}
}
运行结果:
你的程序算法实现,不是依据筛算法的原理实现的,筛选法原理如下:
“筛选法”原理:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去...直至留下的数全为素数
#include <stdio.h>#include <math.h>
void main()
{
int i,t,m;
for(m=2; m<=100; m++)
{
t=sqrt(m);
for(i=2;i<=t;i++)
if(m%i==0) break;
if(i>t) printf("%d is a prime number .\n",m);
else printf("%d is not a prime number .\n",m);
}
getchar();
}
你这样写的,会把1也认为是prime number。根据定义,1不是素数。2才是最小的素数!还把2是素数给漏掉!
for(m=1;m<=100;m=m+2)这里应该为for(m=2;m<=100;m++)
在for()循环之前应该说明m=1时,不是素数!
希望我的回答对你有帮助!
#include<stdio.h>
#include<math.h>
void main(){
int i,j,a[1001];
for(i=1;i<1001;i++)a[i]=i;
a[1]=0;
for(i=2;i<sqrt(1001);i++)
{
for(j=i+1;j<1001;j++)
{
if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0) a[j]=0;
}
}
for(i=1,j=0;i<1001;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
j++;
}
if(j==8)
{
printf("\n");
j=0;
}
}
printf("\n");
}
楼下筛法原理讲的差不多了,但有一条没讲,就是筛法只要循环到sqrt(n)就可以了,至于为什么自己可以想一下。