算法一、运用试除法的通用解法。
//质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;
//否则称为合数(规定1既不是质数也不是合数)
#include <stdio.h>
int main()
{
int i = 0;
int count =0;
for (i = 100; i <=200; i++)
{
//判断i是否为质数
//试除法, 13 2-12
//产生2--i-1
int j=0;
for (j = 2; j<i; j++)
{
if(i%j == 0)
{
break;
}
}
//已经把所有能够被整除的全部剔除了。剩下的是不能乘除
//此时剩下的质数,然后把j 全部打印出来。
if(j==i)
{
count++;
printf("%d ",i);
}
}
printf("总共有\n%d个质数",count);
return 0;
}
算法二、运用开平方、剔除偶数减少循环次数,简单高效。
//质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;
//否则称为合数(规定1既不是质数也不是合数)
#include <stdio.h>
#include <math.h>
int main()
{
int i = 0;
int count =0;
for (i = 101; i <= 200; i+=2)
// 因为偶数绝对不是质数,因此在循环时可以直接排除偶数。
//这里初始值101,每次加2,都是奇数。
{
int j = 0;
for ( j = 2; j <=sqrt(i); j++)
//一个数能够能够写成i=a*b,则循环的最大就是sqrt(i)
//这样开平方后试除的次数会明显变少。
{
if (i%j == 0)
{
break;
}
}
if (j>sqrt(i))
{
count++;
printf("%d ",i);
}
}
printf("\n质数一共有%d个",count);
return 0;
}
总结、对于质数的求解,在初学阶段建议掌握住自己容易理解的算法,并能够运用到其他项目中。
当自己熟悉C语言编程后可以考虑采用其他更优质的算法,寻求最优解。