在刚开始学习使用C语言时,通过练习编程来提高对语法的思考是一个很不错的方法。判断素数是一个非常适合刚刚开始学习的我们练习的。下面我给大家简绍几种判断素数的方法及参考代码。

一、暴力方法
在数学中我们知道素数是约数只有1和本身的整数称为质数,或称素数。
所以判断当前数是否为素数可以通过for()控制从2开始到当前数,如果在该过程中存在可以整除的数字则该数不是素数,若没有则该数为素数。

#include<stdio.h>
#include<stdlib.h>int main()
{int n = 0;scanf("%d", &n);int j = 0; for (int i = 2; i < n; i++){if (n % i == 0){j = 1;printf("该数不是素数!");break;}}if (j == 0){printf("该数是素数:%d", n);}system("pause");return 0;
}

二、暴力法改进2
上述判断方法,明显存在效率极低的问题。对于每个数n,其实并不需要从2判断到n-1,我们知道,一个数若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n),一个大于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>int main()
{int n = 0;scanf("%d", &n);int j = 0;for (int i = 2; i < sqrt(n); i++){if (n % i == 0){j = 1;printf("该数不是素数!");break;}}if (j == 0){printf("该数是素数:%d", n);}system("pause");return 0;
}

三、数学方法
若n≥6且n-1和n+1为孪生素数,那么n一定是6的倍数。
证明:
∵ n-1和n+1是素数 ┈┈┈┈┈ ①
∴ n-1和n+1是奇数
∴ n是偶数,即n是2的倍数 ┈┈┈┈┈ ②
假设n不是3的倍数,得:
n=3x+1 或 n=3x+2,
如果n=3x+1,则n-1=3x,与①违背,故n≠3x+1;
如果n=3x+2,则n+1=3(x+1),与①违背,故n≠3x+2;
∴假设不成立,即n是3的倍数,又有②得结论:
n是6的倍数。

由上面的规律可以推出下面结论:
若x≧1且n=6x-1或n=6x+1不是素数,那么n一定不是2和3的倍数。
证明:
∵n=6x-1或n=6x+1,即n=2(3x)-1或n=2(3x)+1或n=3(2x)-1或n=3(2x)+1。
∴n一定不是2和3的倍数。

素数出现规律:
当n≧5时,如果n为素数,那么n mod 6 = 1 或 n mod 6 = 5,即n一定出现在6x(x≥1)两侧。
证明:
当x≥1时,有如下表示方法:
┈┈ 6x,6x+1,6x+2,6x+3,6x+4,6x+5,6(x+1),6(x+1)+1┈┈
不在6x两侧的数为6x+2,6x+3,6x+4,即2(3x+1),3(2x+1),2(3x+2),它们一定不是素数,所以素数一定出现在6x的两侧。

bool isPrime(int num)
{if (num == 2 || num == 3){return true;}if (num % 6 != 1 && num % 6 != 5){return false;}for (int i = 5; i*i <= num; i += 6){if (num % i == 0 || num % (i+2) == 0){return false;}}return true;
}

第三个代码原文:
https://blog.csdn.net/code_pang/article/details/7880245
练习一个判断素数的题
打印100~200之间的素数

代码如下:

#include <stdio.h>
#include<stdlib.h>
#include<math.h>int main()
{int n = 0;int m = 0;int t = 0;int i = 0;scanf("%d %d", &n, &m);t = sqrt(m);for (int j = n; j <= m; j++){for (i = 2; i <= t; i++){if (j % i == 0){break;}}if (i > t){printf("%d\n", j);}}system("pause");return 0;
}

【C语言】判断素数的算法从一般到高效相关推荐

  1. c语言中prime的作用,C语言判断素数prime

    <C语言判断素数prime>由会员分享,可在线阅读,更多相关<C语言判断素数prime(2页珍藏版)>请在人人文库网上搜索. 1.主函数:#include int prime( ...

  2. C语言判断素数的两种方法

    C语言判断素数的两种方法 素数又称质数.所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被 2~16 的任一整数整除. 思路1):因此判断一个整数m是否是素数, ...

  3. 判断素数及其算法优化

    首先,我们要清楚什么是素数? 素数:又称质数,一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数. 根据素数的定义,我们可以写 ...

  4. linux c开多线程算质数,C语言判断素数(质数)

    这是一个C语言 while 循环的示例:判断一个整数 n(n>1)是否为素数(也成质数). 问题分析 输入:一个整数n(n>1). 输出:Yes or No. 如果一个整数 n(n> ...

  5. c语言判断素数squ,poj1811——Prime Test//素数判断+整数分解因子

    题意:给定N,如果N为素数,输出"Prime",否则输出其最小因子. 思路:用miller_rabin判断素数,pollardRho用于整数因子的分解.整数因子分解还有一个更快的算 ...

  6. C语言——判断素数的几种方法以及相关题目

    目录 一,什么是素数 二,如何判断一个自然数为素数 三,相关题目 四, 总结 一,什么是素数 素数又称质数,是指在大于1的自然数中,因数仅有1和它本身的自然数 二,如何判断一个自然数为素数 思路一,由 ...

  7. C语言判断素数(质数)O(sqrt(n))、O(sqrt(n)/2)、O(sqrt(n)/3)【素数分布规律】、口算

    质数是指在大于1的自然数中,除了1和它本身外没有其他因数的自然数. 若所要判断的数对我们给出的可能因数除余结果均不为0,即该数不能被除1和本身外的其他整数整除,则该数为素数. 故本文主要针对所给可能因 ...

  8. C语言判断素数方法之试除法

    素数又称质数,指的是一个大于1的正整数,如果除了1和它本身以外,不能被其他正整数整除,就叫素数,如2,3,5,7,11,13,17-.接下来让我们以打印区间[a,b]内所有素数为目标来探究一种判断素数 ...

  9. C语言判断素数,判断质素算法

    1.判断一个数是否为质数 思路:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.所以从2开始进行求余,在小于自然数本身数字里没有一个数字进行求余数为0的,则证明输入的自然数是质数 ...

最新文章

  1. zabbix--监控MySQL主从状态
  2. php 上传图片并生成缩略图,php 图片上传并生成缩略图代码
  3. 怎样推断一棵树是否是平衡二叉树
  4. python 局域网共享
  5. 在看完《Programming in Lua》之后
  6. 一篇文章带你解析,乐观锁与悲观锁的优缺点
  7. cogs 1456. [UVa 10881,Piotr's Ants]蚂蚁
  8. DataKeyNames
  9. Vim-安装 YouCompleteMe
  10. Apache骆驼丝攻示例
  11. springboot添加webmagic_SpringBoot+Solr + webmagic JD商品爬取数据,放入solr中做搜索
  12. DNA序列 LOJ NOIP模拟赛 D1T1 字符串哈希
  13. goquery php,golang:Goquery简单爬虫实例
  14. iPhone 9或于4月3日发布;复制粘贴之父Larry Tesler去世;Android 11开发者预览版来了!| 极客头条...
  15. 这是一条“神奇”的评论
  16. 【FPGA——协议篇】:I2C总线协议详解+verilog源码
  17. 二进制、十进制、八进制、十六进制转换对照表
  18. Java NIO 中的非阻塞究竟体现在哪里?
  19. 数据库锁 与 事务隔离级别
  20. ONFI ZQ Calibration

热门文章

  1. STM32的中断和异常
  2. 分析师的嘴,骗人的鬼?年薪百万的券商分析师靠谱吗?Python量化大数据给你答案!| 邢不行
  3. activiti并行网关(Parallel Gateway)
  4. Android开机图片替换
  5. 项目管理-商业价值论证
  6. VINS-初始化:【翻译】Robust Initialization of Monocular Visual-Inertial Estimation on Aerial Robots
  7. 小程序源码:最牛王者荣耀装逼神器助手
  8. java 英文单词排序_java对英文单词排序
  9. matlab中设置拟合初值,matlab中的nlinfit函数时,参数需要回归系数的初值,如何确定?...
  10. window server2016服务器激活方法(简单快速,亲测可用)