素数
素数
素数(质数)(prime number):在大于1的数中,除了1和它本身以外不再有其他因数的数。eg:2 3 5 7 11 13......
问题:打印100~200 之间的素数
思想:先产生100-200之间的数,判断是否为素数,是则输出,不是则继续,直到结束。
主要思想在于判断素数:A模2 ~(A-1)如果其中有结果为0 则A不是素数,跳出循环进行下一个数。
如果模到A-1结果不为0,则A是素数,输出A。
代码实现:
void Prime()
{
int count=0; //记录素数总个数
int i = 0;
for(i=100;i<=200;++i) //产生100-200之间的数
{ //判断素数
int j = 0;
for(j=2;j<i;++j) //产生2-(i-1)
{
if(i%j==0) //如果模为0;则跳出
{
break;
}
} //如果是break跳过来,则i!=j,如果是循环至结束,则i==j;
if(i==j))
{
printf("%d ",i);
count++;
}
}
printf("\n %d \n",count);
}
这并不是最优的代码
2.一个数A如果不是素数,会由两个数a,b(a<=b)相乘得到,这两个数其中一个小于等于A开平方。即a<=√A
eg: 27 3*9=27 3 <= √27 我们找到3后就不必去找9,所以我们模时就可以模到√A即可,不用将2~(A-1)全部模。即for( j = 2 ; j < sqrt(i) ; ++j )
代码实现:
void Prime()
{
int count=0;
int i = 0;
for(i=101;i<=200;i+=2) //去除偶数
{
int j = 0;
for(j=2;j<sqrt(i);++j) //求平方根
{
if(i%j==0)
{
break;
}
}
if( j>sqrt(i)) //是循环结束时,j>sqrt(i) break跳转过来时 j<=sqrt
{
printf("%d ",i);
count++;
}
}
printf("\n %d \n",count);
}
使用sqrt() 记得包头文件 #include<math.h>
我在VS2010编译器
如果有误,希望指出