【中学】找出最大素数
【中学】找出最大素数
小明在中学学习了什么是素数。素数是指一个只能被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)
除此以外还有“朴素筛”,“欧拉筛”等许多不同算法,感兴趣的同学可以尝试
【中学】找出最大素数相关推荐
- 【Java】编写程序,找出梅森素数
什么是梅森素数? 它由梅森数而来.梅森数是指形如2^p-1的一类数,其中指数p是素数,常记为Mp.如果梅森数是素数,就称为梅森素数. 根据定义我们可以有这样的思路:1.先找出素数p 2.再将找到 ...
- python找出素数_[Python 1] 如何使用Python找质数?
学习生物信息需要熟练掌握一门甚至多门编程语言,比如Python.R.C++,这取决于你的需求. 但语言只是工具,最关键的是如何合理使用工具去解决生物学问题,这需要你去多写.多查.多看来锻炼.不然给你把 ...
- c语言找出比n小的最大质数,C++ 实现求小于n的最大素数的实例
C++ 实现求小于n的最大素数的实例 枚举就是基于已有知识镜像答案猜测的一种问题求解策略 问题:求小于n的最大素数 分析: 找不到一个数学公式,使得根据N就可以计算出这个素数 我们思考: N-1是素数 ...
- 5、找出100到1000内的不含9的素数,存到result.txt文件中
题目: /* 5.找出100到1000内的不含9的素数,存到result.txt文件中 */ 我没有写到result.txt文件中,我写到了Five127.txt文件中 代码: public clas ...
- 实验五:任意输入10个int类型数据,排序输出,再找出素数
一.实验代码如下: 1 /*本程序用来任意输入10个int类型数据,排序输出,再找出素数*/ 2 3 package jiangli; 4 5 import java.util.Scanner; 6 ...
- Java黑皮书课后题第10章:*10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数
10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 题目 破题 代码 运行结果 题目 10.18(大素数)编写程序找出五个大于Long.Max_VALUE的素数 破题 类似编程 ...
- Java黑皮书课后题第6章:**6.29(双素数)双素数是指一对差值为2的素数。例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数。编写程序,找出小于1000的所有双素数
6.29(双素数)双素数是指一对差值为2的素数.例如,3和5就是一对双素数,5和7是一对双素数,而11和13也是一对双素数.编写程序,找出小于1000的所有双素数 题目 题目描述 破题 代码 运行示例 ...
- Java黑皮书课后题第6章:**6.28(梅森素数)如果一个素数可以写成2^p-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。编写程序,找出p≤31的所有梅森素数,然后显示如下结果
6.28(梅森素数)如果一个素数可以写成2^p-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数.编写程序,找出p≤31的所有梅森素数,然后显示如下结果 题目 题目描述 破题 代码 题目 题目 ...
- C语言 找出任意两整数之间的素数以及他们的和
#include<stdio.h> //函数声明 int isPrime(int); int prinmeNumbers(int,int); int primeNumbers(int,in ...
最新文章
- mysql的越过用户权限表登录
- 【ACM】杭电OJ 2020(排序)
- 【机器学习】机器学习的学习经验总结!
- 查询jsp servelet mysql_JSP + Servlet + JDBC + Mysql 实现增删改查 课程管理系统(示例代码)...
- mysql tags_mysql tags table解决方法
- go 根据输入类型执行对应的方法_Go 每日一库之 sqlc
- MATLAB中zero和ones函数(转载)
- SpringMVC 参数绑定注解解析
- 直流电机、减速器、编码器与TB6612FNG知识整理
- windows 系统删除服务命令 sc delete 服务名称
- 红烛电子教鞭 2.5.1.0 中文绿色版
- 微信小程序 video 视频 组件
- 【区块链 | Compound】4.剖析DeFi借贷产品之Compound:清算篇
- mac制作win启动盘
- ‘java‘ 不是内部或外部命令,也不是可运行的程序
- poi导出excel包含图片,弹出页面下载框
- NG Toolset开发笔记--5GNR Resource Grid(9)
- 石英晶体振荡器的基本原理
- warning: go env -w GO111MODULE=... does not override conflicting OS environment variable
- Java开发面试基础,cmd启动mysql服务显示服务名无效