求0-100内有多少素数?
25个
-
我的代码
只限制于0-100,原理是0-100之间的如果不是素数,则因数必有0-9之间的数,则使判断的那个数n除0-9,设置两个变量step,total,一个变量判断是否可以整除0-9内的数,如果能除一个则step加1,最后如果(step==1&&n!=1)||(step==2&&n==2)||(step==2&&n<10),不是1且0-9内只能整除一个(1),则是素数,是n=2且0-9内能整除2个(0,2),则是素数,若是n是3,5,7,且0-9内能整除2个(1和自己),则是素数
#include <stdio.h>
int sushu(int n)
{
int step=0;
int total=0;
int i;
for(i=1;i<10;i++)
{
if(n%i!=0)
{
step=step;
}
if(n%i==0)
{
step++;
}
}
if((step==1&&n!=1)||(step==2&&n==2)||(step==2&&n<10))
{
total++;
}
return total;
}
int main()
{
int alltotal=0;
int i;
for(i=0;i<100;i++)
{
alltotal+=sushu(i);
printf("%d\t%d\n",i,sushu(i));
}
printf("%d\n",alltotal);
return 0;
}
-
涛哥代码
优化部分:判断n是否为素数,判断到根号n即可,不用一直算到n(数学问题)
#include <stdio.h>
#include <math.h>
int sushu(int n)
{
int i;
int len=sqrt(n);
if(n<=1)
{
return 0;
}
for(i=2;i<=len;i++)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
int main()
{
int i;
int total=0;
for(i=0;i<100;i++)
{
if(sushu(i)==1)
{
printf("%d\n",i);
total++;
}
}
printf("%d\n",total);
return 0;
}