先看这个题目:
分析下这个题目:
先判断这个正整数是不是素数中用Sqrt()函数减少循环次数,后面再if判断number每一位是不是2,3,5,7。如果不是纯质数就先执行count--后跳出循环再用count++,等于没加。这个计算叫(半个暴力算法)在一分钟之内出结果 。 看以下程序为:
#include<stdio.h>
#include<math.h>
int main()
{int number;//是正整数
int count=0;//求纯质数个数
int i;
int isPrime;//判断是不是素数
int temp;
int red;
for(number=1;number<=20210605;number++)//在这里1~20200605中寻找其中纯质数;
{
isPrime=1;//先判断它是素数
for(i=2;i<=sqrt(number);i++)//用sqrt函数减小循rt环,如果不等于sqrt(number)会多一个25这个数。
{ if(number%i==0)//这里是判断是否是素数 ;
{
isPrime=0;//如果不是赋值为0;
break;
}
}
if(isPrime==1)//这里是判断number先是不是一个素数
{
for(temp=number;temp!=0;temp/=10) //temp是临时保存numbe,for控制循环次数
{
red=temp%10;//red是临时保存temp每一位值;
if((red==2)||(red==3)||(red)==5||(red==7))//判断每一位等不等于2,3,5,7。/都等于count+1个
{
continue;
}
else
{
count--;//先减去一次后跳出循环后再加会来,就等于没加;
break;
}
}
count++;
}
}
printf("\n1~20210605中一共有%d个纯质数",count);
return 0;
}
或者写这样程序:
#include<stdio.h>
#include<math.h>
int main()
{int number;//是正整数
int count=0;//求素数个数
int i;
int isPrime;
int temp;
int red;
for(number=1;number<20200606;number++)//在这里1~20200605中寻找其中纯质数;
{
isPrime=1;//先判断它是素数
for(i=2;i<=sqrt(number);i++)
if(number%i==0)//这里是判断是否是素数 ;
{
isPrime=0;//如果不是赋值为0;
break;
}
if(isPrime==1)//这里是判断number先是不是一个素数
{
for(temp=number;temp!=0;temp/=10) //temp是临时保存numbe,for控制循环次数
{
red =temp%10;//red是临时保存temp每一位值;
if(red==2||red==3||red==5||red==7)//判断每一位等不等于2,3,5,7。/都等于count+1个
continue;
else
{
break;
}
}
if(temp==0)count++; //这条if()判断是否执行完前面for循环语句;
}
}
printf("1~20200605中一共有%d个纯质数",count);
return 0;
}
运行结果为:
感谢各位观看,我希望我这个程序对你有所帮助!