方法一
有两个方法来解决这个问题,以下是第一个 ,没有用到函数
#include <stdio.h>
int main()//输出100-200之间的素数
{
int i = 0;
int count = 0;
//判断一个函数是否为素数,用2-i-1之间的数去试除这个数
for (i = 101; i < 200; i++)
{
int flag = 1;//flag是1,表示i是素数
int j = 0;
for (j = 2; j < i - 1; j++)
{
if (i % j == 0)//如果能除开,说明不是素数
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
count++;
}
}
printf("\n%d\n", count);//素数的数量
return 0;
}
这个代码还可以优化一下,使得效率更高
#include<stdio.h>
#include<math.h>
int main()//输出100-200之间的素数
{
int i = 0;
int count = 0;
//判断一个函数是否为素数,用2-i-1之间的数去试除这个数
//for (i = 101; i < 200; i++)//每次加1,太麻烦,因为偶数肯定不是素数,所以我们每次+2
for (i = 101; i < 200; i+=2)
{
int flag = 1;//flag是1,表示i是素数
int j = 0;
//for (j = 2; j < i - 1; j++)//每次试除到i-1,很浪费,我们会发现,一个素数的两个乘数,肯定有一个是小于它的开平方
for (j = 2; j <=sqrt(i); j++)//sqrt开平方的意思,是一个数学库函数,需要引头文件#include<math.h>
{
if (i % j == 0)//如果能除开,说明不是素数
{
flag = 0;
break;
}
}
if (flag == 1)
{
printf("%d ", i);
count++;
}
}
printf("\n%d\n", count);//素数的数量
return 0;
}
方法二
下面是函数的方法
#include <stdio.h>
#include<math.h>
int is_prime(int n)
{
int j = 0;
for (j = 2; j <= sqrt(n); j++)
{
if (n % j == 0)
return 0;
}
return 1;
}
int main()
{
int i = 0;
int count = 0;
for (i = 101; i <= 200; i += 2)
{
//下面是函数
if (is_prime(i))//如果不是素数就会返回0,返回0 if语句判断为假,不执行,回到for循环,是素数返回一,执行语句
{
printf("%d ", i);
count++;
}
}
printf("\n%d\n", count);
return 0;
}