【中学】找出最大素数

小明在中学学习了什么是素数。素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。

输入:

取值范围

输出:

该范围内的最大素数

样例:

序号 测试输入 期待的输出 额外进程
1 100↵ The max prime number is 97.↵ 0

思路

既然是要寻找最大素数骂我们不放从最大值开始倒序以此判断

代码

#include<stdio.h>
main()
{int n,i,a=1;scanf("%d",&n);for(;n>0;n--){  for(i=2;i<n;i++){if(n%i==0)break;if(i==n-1){printf("最大素数是%d.\n",n);a=0;break;}}if(a==0) break;}
}

课外思考

还没有更“简单”的方式呢?从什么角度可以化简呢?
事实上我们可以从数学角度化简数学模型(埃氏筛):

要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。
同时在判断素数时,我们不需要尝试比N小的所有数,只要尝试比 N \sqrt{N} N ​小的所有奇数就可以了

这两个结论的证明很简单,同学们可以自己尝试
我们这里考虑到输入的N并不大,为了简化代码,只考虑6的倍数,也即大于五的素数必然分布在六的倍数两侧

代码

#include <stdio.h>
#include<math.h>
int main()
{int n,i,a=1;  scanf("%d",&n);  for(;n>0;n--){if(n==2||n==3||n==5)printf("%d",n);else if(n%6==1||n%6==5){for(i=3;i<n;i+=2)  { if(n%2==0||n%i==0) break;if(i>=(int)sqrt(n))  {  printf("The max prime number is %d.\n",n);  a=0;  break;  } }  if(a==0) break;}if(a==0) break;}
}

虽然代码看似更长更复杂了,但是面对更大的N时所用时间显著缩短
以我的运行环境为例:N= 1 0 9 10^{9} 109时,普通方法time=7.985s,改进后time=0.618s


除此以外还有“朴素筛”,“欧拉筛”等许多不同算法,感兴趣的同学可以尝试

【中学】找出最大素数相关推荐

  1. 【Java】编写程序,找出梅森素数

    什么是梅森素数? 它由梅森数而来.梅森数是指形如2^p-1的一类数,其中指数p是素数,常记为Mp.如果梅森数是素数,就称为梅森素数. 根据定义我们可以有这样的思路:1.先找出素数p    2.再将找到 ...

  2. python找出素数_[Python 1] 如何使用Python找质数?

    学习生物信息需要熟练掌握一门甚至多门编程语言,比如Python.R.C++,这取决于你的需求. 但语言只是工具,最关键的是如何合理使用工具去解决生物学问题,这需要你去多写.多查.多看来锻炼.不然给你把 ...

  3. c语言找出比n小的最大质数,C++ 实现求小于n的最大素数的实例

    C++ 实现求小于n的最大素数的实例 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计算出这个素数 我们思考: N-1是素数 ...

  4. 5、找出100到1000内的不含9的素数,存到result.txt文件中

    题目: /* 5.找出100到1000内的不含9的素数,存到result.txt文件中 */ 我没有写到result.txt文件中,我写到了Five127.txt文件中 代码: public clas ...

  5. 实验五:任意输入10个int类型数据,排序输出,再找出素数

    一.实验代码如下: 1 /*本程序用来任意输入10个int类型数据,排序输出,再找出素数*/ 2 3 package jiangli; 4 5 import java.util.Scanner; 6 ...

  6. Java黑皮书课后题第10章:*10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数

    10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 题目 破题 代码 运行结果 题目 10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 破题 类似编程 ...

  7. Java黑皮书课后题第6章:**6.29(双素数)双素数是指一对差值为2的素数。例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数

    6.29(双素数)双素数是指一对差值为2的素数.例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数.编写程序,找出小于1000的所有双素数 题目 题目描述 破题 代码 运行示例 ...

  8. Java黑皮书课后题第6章:**6.28(梅森素数)如果一个素数可以写成2^p-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。编写程序,找出p≤31的所有梅森素数,然后显示如下结果

    6.28(梅森素数)如果一个素数可以写成2^p-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数.编写程序,找出p≤31的所有梅森素数,然后显示如下结果 题目 题目描述 破题 代码 题目 题目 ...

  9. C语言 找出任意两整数之间的素数以及他们的和

    #include<stdio.h> //函数声明 int isPrime(int); int prinmeNumbers(int,int); int primeNumbers(int,in ...

最新文章

  1. mysql的越过用户权限表登录
  2. 【ACM】杭电OJ 2020(排序)
  3. 【机器学习】机器学习的学习经验总结!
  4. 查询jsp servelet mysql_JSP + Servlet + JDBC + Mysql 实现增删改查 课程管理系统(示例代码)...
  5. mysql tags_mysql tags table解决方法
  6. go 根据输入类型执行对应的方法_Go 每日一库之 sqlc
  7. MATLAB中zero和ones函数(转载)
  8. SpringMVC 参数绑定注解解析
  9. 直流电机、减速器、编码器与TB6612FNG知识整理
  10. windows 系统删除服务命令 sc delete 服务名称
  11. 红烛电子教鞭 2.5.1.0 中文绿色版
  12. 微信小程序 video 视频 组件
  13. 【区块链 | Compound】4.剖析DeFi借贷产品之Compound:清算篇
  14. mac制作win启动盘
  15. ‘java‘ 不是内部或外部命令,也不是可运行的程序
  16. poi导出excel包含图片,弹出页面下载框
  17. NG Toolset开发笔记--5GNR Resource Grid(9)
  18. 石英晶体振荡器的基本原理
  19. warning: go env -w GO111MODULE=... does not override conflicting OS environment variable
  20. Java开发面试基础,cmd启动mysql服务显示服务名无效

热门文章

  1. 弹性伸缩定时任务支持Cron表达式 1
  2. 疫情使我被迫躺平,接下来该何去何从
  3. 开机报错0190: critical low-battery error的解决方案
  4. C# 生成二维码, winform生成二维码,二维码编号自动增加
  5. MySQL的嵌套查询
  6. 因特网的服务器协议,因特网信息访问协议
  7. SSR 与当年的 JSP、PHP 有什么区别?
  8. linux如何改变光标的样子,如何更改光标及其大小?
  9. windows10 音频出现 未安装音频输出设备 报错的解决方式之一
  10. 【社交网络】映射主题网络:从两极分化的人群到社区集群(二)