打印100-200之间的所有素数。
素数:即质数,除了1和它本身之外,再没有其他约数。
方法一:试除法,将100-200之间的每个数据除以从2开始比它本身小的每一个数,如果能被整除,则说明这个数不是素数,代码实现:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
int j = 0;
int count = 0;//count用来计数100~200之间的素数个数
for (i = 101; i < 200; i++)//外层循环用来计数100~200
{
for (j = 2; j < i; j++)//内层循环,用j计数所有[2,i)之间的数据
{
if (i % j == 0)//用i除以[2,i)之间的数,如果能被整除则不是素数
{
break;//此时i不是素数,跳出当前的内层循环,进入外层循环,重新进行判断
}
}
if (j == i)//当i=j时,说明[2,i)之间的所有数据都不能被i整除,此时打印素数
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
system("pause");
return 0;
}
方法二:对上述方法进行优化,因为当i/2之前的数据无法被i整除时,那么i/2之后的数据同样不能被i整除。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
int j = 0;
int count = 0;
for (i = 101; i < 200; i++)
{
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
break;
}
}
if (j >i/2)
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
system("pause");
return 0;
}
方法三:如果i能够被[2,sqrt(i)]之间的数据整除,则i不是素数。因为如果i能被2~i-1之间的任一数据整除,其两个因子中必定有一个小于或等于sqrt(i),另一个大于或等于sqrt(i)。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
int count = 0;
for (i = 101; i < 200; i++)
{
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
if (j >sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
system("pause");
return 0;
}
方法四:因为相邻的素数只有2和3,其他素数不可能相邻,因此循环条件可以改为i+=2。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i = 0;
int j = 0;
int count = 0;
for (i = 101; i < 200; i+=2)
{
for (j = 2; j < sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
if (j >sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount=%d\n", count);
system("pause");
return 0;
}