如何用C语言计算1到100之间的素数有哪些?[学习]

如何用C语言计算1到100之间的素数有哪些?

//1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
//2.程序源代码:
#include "stdio.h"
#include "math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("\n");
for(m=1;m<=100;m++)
{
k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{
leap=0;break;
}
if(leap)
{
printf("%-4d",m);
h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThe total is %d",h);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-31
#include "stdio.h"
#include "math.h"
main()
{
int n = 100, j = 0;
int *A = ( int *)malloc( n * sizeof( int ));

for ( int p = 2; p < n; A[p] = p++ );
for ( int p = 2; p < (int)sqrt((float) n ); p++ )
{
if ( A[p] ) {
j = p * p;
while ( j <= n ) {
A[j] = 0;
j += p;
}
}
}

for ( int p = 2, i = 0; p < n; p++)
{
if ( A[p] ) {
printf ( "%-4d ",A[p] );
if ( !(++i%10) ) printf ( "\n" );
}
}
}

效率稍高的~
第2个回答  2013-10-31
#include "iostream.h"
#include "math.h"
void main()
{
int a,j,i,k;

for(a=1;a<=100;a=a+2)
{
i=sqrt(a+1);
k=i;
for(j=2;j<=i;j++)
if(a%j==0)break;

if(j>=k+1)
cout<<a<<"\t";

}
}
第3个回答  2013-10-31
补充一下,我的方法省去了求余这一步,直接按倍数填0,省去了许多不必要的循环
相似回答