编写一个C语言程序,要求打印100~200之间的素数
在C语言程序中,我们要想打印100-200之间的素数,首先我们得判断该数是不是素数.
判断素数的算法,有位大神写过这样一篇文章,我就不在详细赘述了。
求质数算法的N种境界
在此,我仅简单的总结归纳一下.
境界一:假设要判断n是否为素数,就从2一直试除到n-1.
境界二:从2开始一直试除到n/2.
境界三:从2开始,然后是3、5、7、9....,一直试除到n/2.
境界四:从2开始一直试除到√n(根号n).
境界五:除以小于n的素数.
PS:境界四与境界五平级
算法转程序因为要从2一直试除到n-1,所以这里一定要用循环进行操作.
一想到循环,我们第一时间应该想到的是:循环的条件是什么?
而在本题中,循环条件非常明显,即:循环变量小于n.
因此,境界一的代码片段如下:
int IsPrimeNumber(unsigned int n){
//定义一个循环变量并初始化为0
unsigned int i = 0;
//如果n小于2,n一定不是素数
if(n<2){
//返回0
return 0;
}
//让循环变量从2开始,
//当循环变量小于n时,进入循环,
//每次循环后,循环变量自增1.
for(i=2;i
与境界一类似,区别仅仅是将循环条件改为了n/2
境界二的代码片段如下:
int IsPrimeNumber(unsigned int n){
//定义一个循环变量并初始化为0
unsigned int i = 0;
//如果n小于2
if(n<2){
//返回0
return 0;
}
//让循环变量从2开始,
//当循环变量小于n/2时,进入循环,
//每次循环后,循环变量自增1.
for(i=2;i
与境界一想比不仅将循环条件改为了n/2,循环后的调整部分也略有改动.
境界三代码如下:
int IsPrimeNumber(unsigned int n){
//定义一个循环变量并初始化为0
unsigned int i = 0;
//如果n小于2
if(n<2){
//返回0
return 0;
}
//让循环变量从2开始,
//当循环变量小于n/2时,进入循环,
//除了第一次循环,循环变量自增1之外
//其余每次循环后,循环变量都自增2
for(i=2;i
境界四代码如下:
int IsPrimeNumber(unsigned int n){
//定义一个循环变量并初始化为0
unsigned int i = 0;
//如果n小于2
if(n<2){
//返回0
return 0;
}
//让循环变量从2开始,
//当循环变量小于√n时,进入循环,
//每次循环后,循环变量自增1
for(i=2;i<=(int)sqrt(n);i++){
if((n%i)==0){
//返回0
return 0;
}
}
//如果程序能执行到这里,
//说明n一定为素数
//返回1
return 1;
}
#include
#include
//声明函数
int IsPrimeNumber(unsigned int n);
int main(){
//定义一个循环变量并初始化
int i = 0;
//定义一个计数器并初始化
int count = 0;
//通过循环变量来提供100-200的数据
printf("100-200之间的素数有:\n");
for(i=100; i<=200; i++){
//如果i是素数
if(IsPrimeNumber(i)){
printf("%d ",i);
count++;
}
}
printf("\n合计共有%d个",count);
return 0;
}
int IsPrimeNumber(unsigned int n){
//定义一个循环变量并初始化为0
unsigned int i = 0;
//如果n小于2
if(n<2){
//返回0
return 0;
}
//让循环变量从2开始,
//当循环变量小于√n时,进入循环,
//每次循环后,循环变量自增1
for(i=2;i<=(int)sqrt(n);i++){
//如果n能整除i时
if((n%i)==0){
//返回0
return 0;
}
}
//如果程序能执行到这里,
//说明n一定为素数
//返回1
return 1;
}
最后祝大家一切安好! ——高小调
原文地址:C语言::打印100-200之间的素数
(如欲转载,请联系高小调博客授权)