程序【12】

题目:判断 101 到 200 之间的素数。

程序分析:判断素数的方法:用一个数分别去除 2 到 sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

看到这里,我们很清楚的发现,这是一个数学问题,那么按照做数学题的思想,想解决一个数学问题,我们就必须知道数学问题深层的含义和概念,概念对一个数学问题来说非常重要。就像吃榴莲一样,我们得先知道剥开壳吃过肉这个概念,要不然,它扎嘴呀!看这小榴莲,啧啧啧。

所以,我们必须先知道什么是素数???------

根据百度知识呀,我们能知道,所谓素数,又称质数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数(也可定义为只有1和本身两个因数的数)。 比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着很重要的地位。


这样一看素数的概念就很简单,不就是只能除尽1和它本身吗?话句话说,就是除了1和它本身,它不再有任何的因子!!!


有了这样的思想,写代码不就轻轻松松了嘛,还是那句话,写代码,理解最重要!!!

求根据理解哈,我们能发现,求素数的方法不止一个,在这里,我将我所知的方法一一写出。

第一种方法:

这种方法就是让i为遍历101-200的变量,j为当i为一个值的时候,小于i大于2的变量,为什么大于2?因为这个方法就是要判断在2~i-1之间有没有i的因子,有就不是素数,没有就是素数。

#include<stdio.h>
//判断 101-200 之间有多少个素数,并输出所有素数。
int main() {int i = 0;for (i = 101; i < 201; i++) {int j = 0;for (j = 2; j <i; j++) {if (i % j == 0)//如果有能除尽的,就跳出循环{break;}}if (i == j)//判断跳出循环的时候j的值,如果等于i那么说说明//此时j等于i本身,那么i就是素数{printf("%d ", i);}}return 0;
}

第二种方法:

如果i不能被2~√i间任一整数整除,i必定是素数。和第一种做法思想一样,就是用到了sqrt()函数。

#include<stdio.h>
#include<math.h>
int main()
{int i = 0;int j = 0;int k = 0;for (i = 101; i < 201; i++){k = sqrt(i);   //如果i不能被2~√i间任一整数整除,i必定是素数for (j = 2; j <= k; j++) {if (i % j == 0){break;}}if (j > k){printf("%d\n", i);}else {// printf("%d 不是素数\n", i);}}
}

第三种方法:

这个方法就是运用素数只能整除1和本身这个概念,那么从1到本身就只有两个因子,当因子的个数为2的时候,说明,它就是素数。

#include<stdio.h>
void f(void) {int i = 0;//设置循环因子:被除数int j = 0;//除数int num = 0;//计数变量printf("101到200间的素数:\n");for (i = 101; i <= 200; i++) {int count = 0;//存储被整除的次数for (j = 1; j <= i; j++)//这里从1-i,下面只能有两种被整除的情况{if (i % j == 0) {count++;}}//里循环结束后判断被整除的次数if (count == 2)//只能整除1和本身{printf("%d\n", i);num++;}}printf("统计:一共%d个素数\n", num);
}int main() {f();return 0;
}

第四种方法:

这种方法比较的特殊,我们想一想,一个数如果前20位的奇数,都不能除尽,那么它一定除了1和本身,也就没有其他因子了。这个方法就是巧妙地运用了这个定理

#include<stdio.h>
int main()
{int i;for (i = 101; i < 200; i++){if (i % 2 != 0 && i % 3 != 0 && i % 5 != 0 && i % 7 != 0 && i % 11 != 0 && i % 13 != 0 && i % 17 != 0)printf("%d\n", i);}return 0;
}

第五种方法:

这种方法和第二种方法思想一样,不过就是运用了函数返回的写法,并且更改了打印的方式,看起来更不错!

#include<stdio.h>
#include<math.h>
int is_Prime(int n)
{int i;for (i = 2; i <= sqrt(n); i++){if (n % i == 0)return 0;//有其他因子就不是素数,返回0}return 1;//是素数就返回1
}
int main(void)
{int i, j = 0;for (i = 101; i <= 200; i++){if (is_Prime(i)){printf("%d ", i);j++;if (j % 5 == 0)//五个为一排,进行打印printf("\n");}}return 0;
}

第六种方法:

纯属心血来潮,搞得更高大上,这样写就是练习一下练习宏定义,函数调用,continue的使用,强制类型转换,a?ba:b判断语句的使用。可以参考,做练习使用。

#include <stdio.h>
#include <math.h>
#define M 101
#define N 200
int is_Prime(int n)
{int i = 2;while (i <= ((int)sqrt((double)n)) + 1){if (n % i == 0)return 0;else++i;continue;}return 1;
}
int main()
{int n, i;for (n = M; n <= N; n++){is_Prime(n) ? printf("%-4d 是素数\n", n) : printf("%-4d 不是素数\n", n);}return 0;
}

第七种方法:

运用函数递归的方法,函数递归就是函数调用函数

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 200int fun(int x, int i)
{if (sqrt(x * x * 1.0) == i)return 1;if (x % i == 0)return 0;fun(x, i + 1);
}
int main()
{for (int i = 101; i <= N; i++){if (fun(i, 2))printf("%d\n", i);}return 0;
}

C语言经典例题100道(求素数最全的方法在这里!!!)相关推荐

  1. C语言经典例题100道(求找水仙花数字)

    程序[13] 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身.例如:153是一个"水仙花数" ...

  2. C语言经典例题100道(没错,就是你要找的那个)

    C语言经典例题100道(没错,就是你要找的那个) 希望可以帮助到你,加油!!! [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位 ...

  3. C语言经典例题100道(辗转相除求最大公约数和最小公倍数)

    程序[16] 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析: (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数: (2)求最大公约数用辗转相除法(又名 ...

  4. C语言经典例题100道

    程序[8] 题目: 题目:输出9*9口诀. 程序分析:分行与列考虑,共 9 行 9 列,i 控制行,j 控制列. 众所周知,在看到编程题目前,最重要的就是先构思,要有思维,然后把自己的思维在脑中构成一 ...

  5. C语言经典算法100道实战题

    [C语言经典算法100道实战题]适合具备C语言基础语法的同学学习,提高编写程序的逻辑思维能力和算法设计能力专门精心设计.100个经典的算法供大家练习及配套对应的录播视频.为我们今后学习其它的编程语言和 ...

  6. C语言经典例题100例(一)

    C语言经典例题100例(程序一) 程序一 有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 解: 首先看题本身是数字相互排列且不重复问题,用循环语句就可以解决.要求输出而是 ...

  7. c语言 正整数 几位 逆序,c语言经典例题:正整数求位数and求顺、逆序位数

    经典例题:正整数求位数and求顺.逆序位数 题目要求: 给出一个int整形正整数,要求: 1.求出它是几位数字 2.按照逆序分别输出每位数字,例如123输出为321 3.按正序输出每位数字 分析: 一 ...

  8. c语言经典例题100例

    题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的 ...

  9. python精彩编程200例百度_完整word版,python经典例题100道

    [程序 1 ] 题目:有 1 . 2 . 3 . 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? [程序 2 ] 题目:企业发放的奖金根据利润提成.利润 (I) 低于或等于 10 万 ...

最新文章

  1. 科技公司最常用的50款开源工具,提升你的逼格~
  2. WSGI和PASTE
  3. 说说JS中的浅拷贝与深拷贝
  4. Pycharm同步git代码提示:Merge failed
  5. 【错误记录】Flutter 使用 MediaQuery 适配全面屏报错 ( No MediaQuery widget ancestor found. )
  6. 重磅推出校园疫情填报系统,永洪BI助力疫情防控
  7. Linux后台运行打包Jar的方法
  8. [导入]C#中TextBox只能输入数字的代码
  9. android studio 无法输入中文,Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案...
  10. Netty异步非阻塞事件驱动及原理详解
  11. itchat库微信自动回复祝福语
  12. Atitit 纯java项目的提升进度大法---通用json dsl接口
  13. BayaiM__oracle切换归档模式步骤:
  14. java字符编码详解_Java中字符编码格式详解
  15. matlab谢尔宾斯三角_几何画板教程:谢尔宾斯基三角形的制作
  16. java与模式孙悟空_设计模式之原型模式 - chenxkang的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. 【SDOI2015】临行前的夜
  18. 网页导出pdf不完整_又一种pdf文献全文一键免费翻译的方法
  19. HDU 4889 Scary Path Finding Algorithm
  20. 小分子PEG的循环节可以做到1-36个,DSPE-PEG4-Mal

热门文章

  1. Python入门练习选择题
  2. 斑马条码打印机断电重启后无法打印问题
  3. 朗朗上口的穴位歌!收藏了,很难找到!
  4. 算法训练营 重编码_我在编码训练营中的经验(以及是否适合您)
  5. 究极花里胡哨的渐变是什么样子的?
  6. 快手2020实习生招聘---测试类--笔试真题
  7. MacOS Big Sur 系统 【您没有权限来打开应用程序“xf-adesk19”】
  8. 做销售,换位思考很重要
  9. Python 图算法系列13-cypher 查询以及模糊查询
  10. 论文翻译[Deep Residual Learning for Image Recognition]