PAT(B) 1013数素数(20)
来源:互联网 发布:虚拟机ubuntu文件共享 编辑:程序博客网 时间:2024/05/16 11:45
题目链接
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
方法一:用常规方法sqrt查找,效率较低,并且最后一有个测试点运行超时,未通过.
代码如下:
#include<iostream>#include<cmath>using namespace std;int main(){ int M,N; int num; int t=2; cin>>M>>N; int *a = new int[N]; a[1] = 2; for (int i = 2;i>0;i++) { num = 0; for(int j=2;j<sqrt(i)+1;j++) if(i%j==0)num=num+1; if (num == 0) { a[t] = i;t = t + 1;} if (t>N)break; } for(int i=M;i<N;i++) { if((i-M+1)%10==0) cout<<a[i]<<endl; else cout<<a[i]<<" "; } cout << a[N]; delete[] a; return 0;}
方法二:用筛法查找,效率大大提升。(首先根据方法一找出第10000个素数为104729)
#include<iostream>using namespace std;int main(){ int M,N; cin>>M>>N; const int maxn=110000; bool flag[maxn]; for(int i=2;i<=maxn;i++) flag[i]=true; for(int i=2;i*i<=maxn;i++) { if(flag[i]) { for(int j=2*i;j<=maxn;j=j+i) flag[j]=false; } } int a[maxn],n=0; for(int i=2,j=0;i<=maxn;i++) { if(flag[i]) { j++; if(j>=M) { a[n++]=i; if(j==N)break; } } } for(int i=0;i<n;i++) { cout<<a[i]; if((i+1)%10==0)cout<<endl; else if(i+1<n)cout<<" "; } return 0;}
0 0
- PAT(B) 1013数素数(20)
- PAT(B)1013. 数素数 (20)
- PAT B 1013. 数素数 (20)
- PAT-B 1013. 数素数 (20)
- pat(B) 1013. 数素数
- PAT-B 1013. 数素数
- PAT-B 1013. 数素数
- PAT-B 1013. 数素数
- PAT 1013 数素数
- 数素数,PAT,1013
- PAT 1013 数素数
- PAT 1013数素数
- PAT 1013 数素数
- Pat 数素数(20)
- PAT-B] 1013. 数素数 [数论]
- PAT (Basic Level) Practise (中文)1013数素数 (20)
- PAT(basic level) 1013 数素数(20)
- pat 乙级 1013 数素数(20分)
- win10、C语言、codeblocks、Mysql
- Wifi
- 如何编写jquery插件之轮播图
- OOA/OOD/OOP
- MyEclipse添加Server Runtime的tomcat
- PAT(B) 1013数素数(20)
- 高斯消元模板
- App Runtime for Chrome打破边界,Android开始侵入Windows系统
- CSS基础教程——纯CSS开发的气泡式提示框
- Three.js自定义相机旋转动画:沿圆弧旋转
- 数据结构实验之查找四:二分查找
- simpledateformat
- 免费在线二维DataMatrix码生成器
- 数据结构上机实验之二分查找