C语言::打印100-200之间的素数
来源:互联网 发布:男士休闲单肩包 知乎 编辑:程序博客网 时间:2024/05/19 02:05
题目要求
编写一个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;i++){ //如果n能够整除2-n内的某个值 if((n%i)==0){ //返回0 return 0; } } //如果程序能执行到这里, //说明n一定为素数 //返回1 return 1;}
境界二的实现
与境界一类似,区别仅仅是将循环条件改为了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;i++){ //如果n能够整除2-n内的某个值 if((n%i)==0){ //返回0 return 0; } } //如果程序能执行到这里, //说明n一定为素数 //返回1 return 1;}
境界三的实现
与境界一想比不仅将循环条件改为了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<n/2;i==2?i++:i+=2){ //如果n能够整除2、3、5、7、9、11、13...n/2内的某个值 if((n%i)==0){ //返回0 return 0; } } //如果程序能执行到这里, //说明n一定为素数 //返回1 return 1;}
境界四的实现
与境界一类似,也仅仅是修改循环条件为√n.境界四代码如下:
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;}
境界五的实现
因为,境界五需要一个连续的素数序列.(2、3、5、7、11、13...)而本题要求打印100-200之间的素数.
出于效率,境界五不适合本题,因此省略.
完整版代码
最终的代码,就以在试除法中,性能相对优越的境界四,来作为核心内容.完整版代码如下:
#include<stdio.h>#include<math.h>//声明函数 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之间的素数
(如欲转载,请联系高小调博客授权)
0 0
- C语言实现打印100~200 之间的素数
- c语言:打印100到200之间的素数
- C语言打印100 ——200之间的素数
- C语言::打印100-200之间的素数
- c语言打印100~200之间的素数
- 用c语言打印100-200之间的素数
- C语言求解素数(质数)的优化:打印100-200之间的素数
- 用C语言打印101~200之间的素数
- 用c语言编写打印出100~200 之间的素数。
- 用C打印100到200之间的素数
- c::从打印100-200之间的素数这个小问题一点点的入坑c语言
- C语言打印100-200间的素数
- 打印100---200之间的素数
- 打印100~200 之间的素数
- 打印100~200 之间的素数
- 打印100~200之间的素数
- 打印100~200 之间的素数
- 打印100—200之间的素数
- 来自深圳的面试经历(一)
- PDO事务处理
- [leetcode] 373. Find K Pairs with Smallest Sums
- laravel的模板中修改编辑的view表单form需要注意的问题
- 【ITOO 1】将List数据导出Excel表
- C语言::打印100-200之间的素数
- 技术网站整理
- c++ 自己实现getLine函数,可以接受任意的字符长度的输入
- 倒计时 jquery.countdown插件
- Maven那点事儿(Eclipse版)
- 图片加载库Glide介绍
- iOS中集成ijkplayer视频直播框架
- cookie的用法
- 零起点学C++ 第三章 初步了解函数