C语言判断素数方法之试除法
素数又称质数,指的是一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数,如2,3,5,7,11,13,17…。接下来让我们以打印区间【a,b】内所有素数为目标来探究一种判断素数最简单的方法:试除法。
那么首先让我们生成a到b间的所有数,记为i,用一个简单的for循环就能解决,接下来我们要判断生成的数是不是素数,我们可以从素数最简单的性质出发:除了1和它本身以外,不能被其他正整数整除,(我们当然只需要考虑小于这个数的正整数)那么让我们生成从2到i-1的所有数,记为c也是一个for循环就能解决,然后让i去模上每一个c,只要出现一个i%c为0,c就不必继续生成了,直接跳出内循环,内循环结束,而当所有c都不使循环break,内循环也会结束,此时的i就是素数了,但是两种情况内循环都会结束,我们怎么区别出哪种情况i为素数呢,我们注意到内循环正常结束时c的值于i相等,那么我们在内循环后面加上一个if判断,剔除掉break出的i,只选择正常结束的i,并将其打印,计数器加一
#include <stdio.h>
int main()
{int a=0;int b=0;int i=0;int c = 0;int num = 0;scanf("%d%d", &a, &b);for (i = a; i <= b; i++){for (c = 2; c <= i - 1; c++){if (i%c == 0){break;}}if (c == i){printf("%d ", i);num++;}}printf("\n有%d个素数", num);return 0;
}
上面的思路没问题,但是略显繁琐,我们可以利用素数的一个性质来优化该代码,我们发现,其实一个数字x的因数分成两大部分,一部分是小于x的平方根,另外一部分大于x的平方根,小于平方根和大于平方根的部分是一一对应的,例如24=2*12=3*8=4*6,只要在2到x的二次方根内找到一个能整除x的数就能判定x不是素数。我们要用根号函数sqrt()需要引用头文件<math.h>,修改后得到以下代码
#include <stdio.h>
#include <math.h>
int main()
{int a = 0;int b = 0;int i = 0;int c = 0;int num = 0;scanf("%d%d", &a, &b);for (i = a; i <= b; i++){for (c = 2; c <= sqrt(i*1.0); c++){if (i%c == 0){break;//跳出内循环}}if (c > sqrt(i*1.0)){printf("%d ", i);num++;}}printf("\n总共有%d个素数", num);return 0;
}
问题便得到解决了。
C语言判断素数方法之试除法相关推荐
- C语言判断素数的两种方法
C语言判断素数的两种方法 素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 思路1):因此判断一个整数m是否是素数, ...
- C语言判断素数(质数)O(sqrt(n))、O(sqrt(n)/2)、O(sqrt(n)/3)【素数分布规律】、口算
质数是指在大于1的自然数中,除了1和它本身外没有其他因数的自然数. 若所要判断的数对我们给出的可能因数除余结果均不为0,即该数不能被除1和本身外的其他整数整除,则该数为素数. 故本文主要针对所给可能因 ...
- c语言中prime的作用,C语言判断素数prime
<C语言判断素数prime>由会员分享,可在线阅读,更多相关<C语言判断素数prime(2页珍藏版)>请在人人文库网上搜索. 1.主函数:#include int prime( ...
- C语言——判断素数的几种方法以及相关题目
目录 一,什么是素数 二,如何判断一个自然数为素数 三,相关题目 四, 总结 一,什么是素数 素数又称质数,是指在大于1的自然数中,因数仅有1和它本身的自然数 二,如何判断一个自然数为素数 思路一,由 ...
- c语言判断素数squ,poj1811——Prime Test//素数判断+整数分解因子
题意:给定N,如果N为素数,输出"Prime",否则输出其最小因子. 思路:用miller_rabin判断素数,pollardRho用于整数因子的分解.整数因子分解还有一个更快的算 ...
- C语言判断素数的方法
最近刚复习C语言,重头开始学起,进行记录每次编程.本次写的是输入一个大于3的正整数,判断其是否为素数. #include <stdio.h>int main(){int i,j,a;a=0 ...
- linux c开多线程算质数,C语言判断素数(质数)
这是一个C语言 while 循环的示例:判断一个整数 n(n>1)是否为素数(也成质数). 问题分析 输入:一个整数n(n>1). 输出:Yes or No. 如果一个整数 n(n> ...
- C语言判断素数(求素数)思路
素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m ...
- 素数 c语言 时间少,C语言判断素数怎么优化时间,1000000以内,不用代码,指点一下就好...
匿名用户 1级 2016-09-04 回答 基本思想 用筛法求素数的基本思想是:把从1开始的.某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉.剩下的数中选择最小的数是素数,然后去掉它的 ...
最新文章
- php函数serialize()与unserialize()
- 视频编解码的理论和实践2:Ffmpeg视频编解码
- hdu 4739 状压DP
- C++ Vecctor容器浅析
- 为什么要重写hashCode()方法和equals()方法以及如何进行重写
- 10W人都想知道的答案!可视化黑科技,这4个数据工具谁最厉害的?
- Vonage再度入围IDC CPaaS“领导者”
- 小米无缝切换60hz/90hz/120hz/144hz刷新率!
- Yum未完成事务问题
- 禁用浏览器cache,是浏览器上的回退按钮失效。
- 产品配置管理相关通知
- fgo服务器维护抽卡,FGO国服最佳抽卡时间推荐,玄学或许能让你脱非入欧!
- UML与Rational Rose
- 东原服务器开机显示bb,启用tls后,服务器出现remote error: tls: bad certificate
- 嵌入式 linux 之 Lzma 移植
- 最新Hive/Hadoop高频面试点小集合
- PPT基础(一)怎么把图片设置为背景
- 互联网视频直播点播EasyDSS平台如何通过接口设置录像计划?
- Windows 7 彻底退出历史舞台
- Mencoder 介绍