问题描述:
用c语言输出100到200之间的素数
问题分析:
素数,就是可以整除的数只有1和它本身的数为素数,因此可以通过取数字和他进行余数计算,累计余数等于0的数量,如果数量大于2,就不是素数,如果等于2,就是素数,又已知,偶数肯定不是素数,所以只要取奇数进行校验即可,又已知,如果一个大于这个数的一半的数肯定不可以整除该数,因此只需要验证从2到这个数的一半时即可,并且期间如果一但累计可整除数量大于1,就可以结束验证,直接判断该数为非素数。
代码段
定义变量
int n = 100;//初始验证数字
int m = 200;//截止验证数字
int loop = 0;//循环变量
//int a = 0;//中间过度值1
int b = 0;//中间过度值2
//int loop1;
int c = m - 1;//中间过度值3
核心算法
for (n = 101;n<= c; n+=2)//由题目已知,100和200都是非素数,所以从101开始验证,到199结束即可,然后每验证一次n加2,以保证每次只验证奇数,降低时间复杂度
{
b = n / 2;//验证循环最大结束标质,因大于验证数一半的数肯定不是可整除数(除其自身外)因此这些数可省略
for (loop = 2; loop<=b; loop++)//循环验证从2开始,到最大验证数的一半结束每循环一次加1
{
if (n % loop == 0)//判断是否可以被整除,
{
break;//若有可被整除数,直接结束循环,该数非素数
}
if(loop==n/2)
printf("%d\n", n);//若loop循环到最后还是没有数可整除该数,则该数为素数,打印该数
}
}
完整代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int n = 100;
int m = 200;
int loop = 0;
//int a = 0;
int b = 0;
//int loop1;
int c = m - 1;
for (n = 101;n<= c; n+=2)
{
//a = 0;
b = n / 2;
for (loop = 2; loop<=b; loop++)
{
if (n % loop == 0)
{
break;
}
//loop += 1;
/* if (a == 2)
break;*/
if (loop == n / 2)
printf("%d\n", n);
}
}
return 0;
}