c语言判断一个数是否为素数思路,C语言判断一个数是否为素数方法解析
一、概念介绍
素数又称为质数。一个大于1的自然数(从2开始),除了1和它本身外,不能被其他自然数整除的叫做素数,否则称为合数。
0和1既不是素数也不是合数,最小的素数是2。
二、代码
方法一:
bool is_Prime(int num){
int i;
for(i = 2;i <= sqrt(num);i++){
if(num % i == 0)//一旦发现有因子,则返回false
return false;
}
return true;
}
注意:在for循环判断时不能忘记 i <= sqrt(num) 的等号,因为假设 p*p = n , n的因子是可以取到 sqrt(n) 的,如判断 9 是不是素数,如果没有等号会出现 9是素数,而实际上 9不是素数。
方法二:
关于质数分布的规律:大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等;
证明:令x≥1,将大于等于5的自然数表示如下:
··· 6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1 ···
可以看到,不和6的倍数相邻的数为6x+2,6x+3,6x+4,由于2(3x+1),3(2x+1),2(3x+2),所以它们一定不是素数,再除去6x本身,显然,素数要出现只可能出现在6x的相邻两侧。因此在5到sqrt(n)中每6个数只判断2个,时间复杂度O(sqrt(n)/3)。
在高配版和尊享版中,都是一个剪枝的思想,高配版中裁剪了不必要的偶数,尊享版中裁剪了不和6的倍数相邻的数,虽然都没有降低时间复杂度的阶数,但都一定程度上加快了判断的速度。
/*一种高效的方法*/
bool isPrime_3(int num){
//两个较小数另外处理
if(num == 2 || num == 3)
return true;
//不在6的倍数两侧的一定不是质数
if(num % 6 != 1 && num % 6 != 5)
return false;
int i;
//在6的倍数两侧的也可能不是质数
for(i = 2;i <= sqrt(num);i += 6){
if(num % i == 0 || num % (i + 2) == 0)
return false;
}
//排除所有,剩余的是质数
return true;
}
三、测试
对负数与0,1进行异常处理
int main(){
int num;
bool result1,result2;
printf("请输入一个正整数,以-1结束: ");
scanf("%d",&num);
while(num < 2 && num != -1){
printf("输入不合法,请重新输入!(说明:素数必须大于1)\n");
printf("请输入一个正整数,以-1结束: ");
scanf("%d",&num);
}
while(num >= 2 && num != -1){
result1 = isPrime(num);
result2 = isPrime_3(num);
if(result1 == true)
printf("%d 是素数\n",num);
else if(result1 == false)
printf("%d 不是素数\n",num);
if(result2 == true)
printf("%d 是素数\n\n",num);
else if(result2 == false)
printf("%d 不是素数\n\n",num);
printf("请输入一个正整数,以-1结束: ");
scanf("%d",&num);
while(num < 2 && num != -1){
printf("输入不合法,请重新输入!(说明:素数必须大于1)\n");
printf("请输入一个正整数,以-1结束: ");
scanf("%d",&num);
}
}
}
四、截图
到此这篇关于C语言判断一个数是否为素数方法的文章就介绍到这了,更多相关C语言判断一个数是否为素数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
时间: 2020-07-24
c语言判断一个数是否为素数思路,C语言判断一个数是否为素数方法解析相关推荐
- c语言实验作业在dev蜗居的思路,C语言程序设计实验(共5篇)
int search_min(int a,int b,int c) { if(a 运行结果: ⑸ 编写一个程序,先定义一个将字符大写.小写和数字进行分类的带参数宏,然后对从键盘输入的一系列字符进行分类 ...
- python求两个数的最大公约数穷举法_C++求最大公约数四种方法解析
C++求最大公约数的四种方法思路,供大家参考,具体内容如下 将最近学的求最大公约数的四种方法总结如下: 第一种:穷举法之一 解释:拿其中一个数出来,用一个临时变量(tem)保存,每次都把那两个数除以这 ...
- c语言求佩尔方程的解设计思路,c语言版 佩尔方程求最小正整数解及第k解(矩阵快速幂)...
佩尔方程讲解连接: 若一个丢番图方程具有以下的形式: 且 为正整数,则称此方程为佩尔方程(英文:Pell's equation 德文:Pellsche Gleichung) 若 是完全平方数,则这个方 ...
- c语言判断一个数是否为偶数源代码,c语言判断一个数是否为偶数
#include #include _Bool isOu(int n){ //高度注意:&的优先级低于== )==){ return true; } else{ return false; } ...
- ACMNO.23 C语言-素数判定 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime
题目描述 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息. 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime 样例输入 97 样例输出 prime 来源/ ...
- python定义函数prime判断是否是素数_用自定义函数判断素数 用C语言编写自定义函数prime(int x),判断x是否为素数?...
用C语言编写自定义函数prime(int x),判断x是否为素数? int prime(int x) { int i,k k=(int)sqrt( (double)x ) for(i=2i&l ...
- 素数探求c语言答案6,c语言素数的几种判断方法.doc
c语言素数的几种判断方法 #include #include main() { int i,n; printf("请输入一个数:"); scanf("%d",& ...
- c语言怎么判断素数return1,C语言实验——判断素数(循环结构)
C语言实验--判断素数(循环结构) Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 从 ...
- C语言试题五十三之将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回。
1. 题目 请编写一个函数void function(Student a[], int n),其功能时:将所有大于1小于整数m的非素数存入xx所指的数组中,非素数的个数通过k传回. 2 .温馨提示 C ...
- 如何判断数组所有数都不等于一个数_工程师编程,C语言学习,关于数组方面的一些总结...
在学习编程语言时,无论如何我们都逃不掉关于数组这个问题. 那么,在谈及这个问题时,我会从三个方面来思考: 1.数组的定义是什么,也就是何为数组? 2.如何在数组中填充元素(数据)? 3.如何用数组来解 ...
最新文章
- python场景建立_Python创建一个街道地址表-问答-阿里云开发者社区-阿里云
- oracle去掉blob的黑边,oracle Blob处理
- C++ Primer 5th笔记(chap 14 重载运算和类型转换)输入和输出运算符
- 新安装和已安装nginx如何添加未编译安装模块/补丁
- 7.4.6 核PCA
- React的Ant Design Pro目录结构
- FBV(function base views) 顾名思义基于函数的视图类 CBV(class base views)基于类的视图类
- 京东发布“下一代智能协同开放平台”战略 助力政企数字化转型
- H3C交换机配置STP配置
- MATLAB中文显示乱码如何解决
- Flann特征点匹配简述(Lowe's algorithm)
- 基于TCP的网络应用程序
- 关于python中的数学方法(math)(全)
- 夜神模拟器的安装与使用
- Error opening data file Tesseract-OCR\tessdata/eng.traineddata问题 解决
- MMdetection中backbone的实现-MobileNetV2
- mysql按天,小时,半小时,N分钟,分钟进行数据分组统计
- imperva网关重新注册
- 代数结构:群、环、域、模、线性空间、格
- win10启动个性化文字提示