您的位置:首页 > 编程语言

打印100~200 之间的素数

2015-11-29 15:45 218 查看
编写思想:对100到200之间的数依次进行for循环判断,看其是否为素数。判断方法:对于一个自然数,除了1以外,不是素数就是合数。若该数字是素数,则不能被除了1和它自身以外的数整除;而一个数如果是合数,则它的所有因子不会大于对其开根号所得出的数,由此可得出每个数最多时候的循环次数。

初次生成的源代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int primer,variabe,sign;
for(primer=101;primer<201;primer++)
{
for(variabe=2;variabe<=sqrt(primer);variabe++)
{
sign=0;
if(primer%variabe==0)  break;
else  sign=1;
}
if(sign==1)
printf("%-5d",primer);
}
return 0;
}
运行结果如下:
101 103 107 109 113 127 131 137 139 149 151 157 163 167
173 179 181 191 193 197 199
由于以上程序产生了一些不必要的循环,增加了程序的时间复杂度,故而对其进行了改进。
改进1:去掉了标志变量sign,减少了内存的占用;
改进2:由于找的是100到200之间的素数,因此其间的偶数均不必进行判断,故而只剩下奇数,又由于奇数肯定无法被偶数整除,故而去掉variable中的偶数循环,降低了程序的时间复杂度。
改进后的代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int primer,variabe;
for(primer=101;primer<201;primer+=2)
{
for(variabe=3;variabe<=sqrt(primer);variabe+=2)
{
if(primer%variabe==0)
break;
}
if(variabe>sqrt(primer))
printf("%-5d",primer);
}
return 0;
}
运行结果同上一致:
101 103 107 109 113 127 131 137 139 149 151 157 163 167173 179 181 191 193 197 199
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  素数   源代码