C语言求素数的两种方法
1,判断n是否能被2~n-1整除
输入的数n不能被2-(n-1)整除,说明是素数
输入的数n能被2-(n-1)整除,说明不是素数
注意:1不是素数,素数是指大于1的自然数,除了1和该数自身外,无法被其他自然数整除的数。
法一:
#include<stdio.h>
int main()
{int i, n;printf("please input a number:"); scanf("%d", &n);for (i = 2; i < n ; i++){if (n%i == 0)break;}if (n <=1 ) printf("This is not a prime\n");else if (i < n) printf("This is not a prime.\n"); else printf("This is a prime.\n");return 0;}
法二:
#include<stdio.h>
int main()
{int i, n;printf("please input a number:"); scanf("%d", &n);if(n<=1)printf("This is not a prime\n");else{for (i = 2; i < n ; i++){if (n%i == 0)break;}if(i>=n)printf("This is a prime\n");elseprintf("This is not a prime\n");}return 0;
}
2,判断n是否能被2~√n间的整数整除
输入的数n不能被2-√n整除,说明是素数
输入的数n能被2-√n整除,说明不是素数
#include<stdio.h>
#include<math.h>
int main()
{int n,i;double k;printf("please input a number:"); scanf("%d", &n);k = sqrt(n);for (i = 2; i <= k;i++){if (n%i == 0) break;}if (n <=1 ) printf("This is not a prime\n");else if (i <= k) printf("This is not a prime.\n");else printf("This is a prime\n");return 0;}
法二:
#include<stdio.h>
#include<math.h>
int main()
{int n,i,k;printf("please input a number:"); scanf("%d", &n);if(n<=1)printf("This is not a prime\n");else{k=sqrt(n);for (i=2;i<=k;i++){if (n%i==0)break;}if(i>=k+1) printf("This is a prime.\n"); else printf("This is not a prime.\n");}return 0;
}
以上两个程序的法二:Modified on April 22, 2019
对于评论出现的问题,在此整理一下
运行软件: VC++ 6.0
weixin_43912791: 这段代码识别不了1啊。。
回答:素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数。所以没考虑1的情况。
weixin_43412408: 能问下i>k的逻辑是什么?想不太明白
第二个方法:对一个数n,如果他能分解成n=pq,那么pq里必然有一个大于等于根号n一个小于等于根号n,也就是说一个合数n必然有一个因子是小于等于根号n的. 所以对一个数n,只要检验他有没有小于等于根号n的因子就可以了(检验小于等于n的因子使循环次数变少,这也是简化的原因)
写这篇文章的初衷是给自己提供一个思路,没有考虑太多的情况,没想到这么多人看,所以重新整理了一下代码。
感谢@ 锦言肾行的分享
素数的定义是只能被1和他本身整除,1不是素数.因此要判断一个数是否为素数.就要判断它能不能被比他小的所有素数整除,这是一个算法.(写到算法时,我只能写出用它除以比他小的所有数,造成运算速度低下)
这里给出的是一个更快速的方法.要判断一个数是否为素数,只要判断比它开根号后的数小的数,能否把它整除.
为什么可以这样做呢.从百度得到的答案如下:
如果一个质数大于根号n,而n可以除尽它,那么n必然也可以除尽一个更小的质数。
例如21,它可以除尽7,而它同样可以除尽3。所以判断21是否质数,只需要判断21是否可以除尽2和3就可以了。5和7和11就不需要判断了。
想来就是这样,例如21.根号21乘根号21等于21.则当一个比根号21的数大的数乘另一个数得到21.另一个数必然小于根号21.
由此可以得到一个法2较快的素数判断算法
C语言求素数的两种方法相关推荐
- C语言判断素数的两种方法
C语言判断素数的两种方法 素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 思路1):因此判断一个整数m是否是素数, ...
- Java中求素数的两种方法
*如何求素数? ** 比1大的整数中,除了1和它本身以外,不再有别的因数,这种整数叫做质数或素数. 所以我们只需要在2~n-1的数中,能找到一个数能整除n,则n为素数. 所以用两个循环遍历就可以得到素 ...
- C语言求最大公约数3种方法
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105163610 C ...
- C语言求最大公约数三种方法详解
C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...
- 求素数的几种方法(通俗易懂)
博主简单的写下这篇文章,主要为了更好地复习和理解,希望对各位有帮助. 素数:指一个只能被1和它本身整除的数. 青铜级别求素数:枚举范围内的每个数在2到本身的范围中是否有被整除的数.没有就是素数,有就不 ...
- java语言中如何表示素数,使用Java语言求素数的几个方法
使用Java语言求素数的几个方法 今天找了一篇"面试50题"的文档,第一题是求fibonacci数列,使用递归很容易就实现了,没什么难度. 第二题是输出101~200之间的素数,没 ...
- 用matlab计算稳态误差,利用Matlab求稳态误差的两种方法.
利用Matlab求稳态误差的两种方法 摘要:稳态误差是系统控制精度或抗扰动能力的一种度量,它是稳态性能的一个重要指标.本文介绍利用Matlab的控制系统工具箱和Simulink工具箱求取系统误差稳态的 ...
- c语言 | 求100-200之间的素数(两种方法)
首先要求100-200之间的素数,要知道素数是什么? 素数就是质数,只能被自身和1整除 下面会介绍两种方法: 常规方法: 代码: int main() { int i = 0; for ...
- c语言程序π,C语言求圆周率π(三种方法)
题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止. 题目2) 根据公式②,用前100项之积计算π的值. 题目1)提供了一种解法,题目2)提供了两种解法,请看解析. 题目1) ...
- c语言求圆周率 . 4,C语言求圆周率π(三种方法)(4页)-原创力文档
C语言求圆周率π(三种方法) 题目1) 利用公式①计求π的近似值,要求累加到最后一项小于10^(-6)为止.题目2) 根据公式②,用前100项之积计算π的值.题目1)提供了一种解法,题目2)提供了两种 ...
最新文章
- MoviePy - 中文文档4-MoviePy实战案例-把多个clip放置在一个画面中(超美)
- hosts和resolv.conf区别
- Java 8 CompletableFuture 浅入
- MariaDB 10的复制 集群 高可用搭建 大表拆分【持续更新中】
- 华硕路由器 linux上不了网,华硕ASUS路由器连不上网怎么办?
- HH SaaS电商系统服务商品在移动端下单结算的交互设计
- 怎么用c语言写一个贪吃蛇,刚学C语言,想写一个贪吃蛇的代码
- python多版本控制操作方法
- Unity 之命名规范(一)
- 模拟新浪微博自动登陆
- 给你一个全自动的屏幕适配方案(基于SW方案)!—— 解放你和UI的双手
- 在保护继承中基类的共有成员_鸡啄米:C++编程入门系列之三十八(继承与派生:派生类对基类成员的访问控制之保护继承与私有继承)...
- 21天战拖记——Day8:猴子法则and继续复习!(2014-05-11)
- 一对一视频聊天app源码,归并排序模板
- CAN总线协议报文浅析
- 实现财务自由的重要工具
- 翻翻git之---溜的飞起的加载效果AVLoadingIndicatorView
- 跟你聊聊员工的离职成本,细算下来超级恐怖!
- 让人们久等了的TCP BBR v2 0快要出炉了
- 跨浏览器和跨平台甘特图dhtmlxGantt,选择它的6个理由!