九度OJ题目1040:Prime Number
2017-04-06 23:39
399 查看
题目1040:Prime Number
时间限制:1 秒
内存限制:32 兆
特殊判题:否
题目描述:
Output the k-th prime number.
输入:
k≤10000
输出:
The k-th prime number.
样例输入:
样例输出:
来源: 2008年上海交通大学计算机研究生机试真题
方法一:数组遍历
8979
时间限制:1 秒
内存限制:32 兆
特殊判题:否
题目描述:
Output the k-th prime number.
输入:
k≤10000
输出:
The k-th prime number.
样例输入:
3 7
样例输出:
5 17
来源: 2008年上海交通大学计算机研究生机试真题
方法一:数组遍历
#include <stdio.h> #include <math.h> //判断是否是素数 int IsPrime(int n){ if(n<=1) return 0; int sq = (int)sqrt(n)+1; while(sq >= 2){ if(n%sq == 0) break; --sq; } return (sq>=2)?0:1; } int main(){ int a=1,ans[10001]; for(int i=2;;i++){ if(i == 2){ ans[a]=2; a++; continue; } if(IsPrime(i)==1){ ans[a]=i; a++; } if(a>10000) break; } int k; while(scanf("%d",&k)!=EOF){ printf("%d\n",ans[k]); } return 0; } /************************************************************** Problem: 1040 User: zpy Language: C++ Result: Accepted Time:90 ms Memory:1032 kb ****************************************************************/
方法二:判断素数与数组遍历同时进行
#include<stdio.h> int k[10001]; int main(int argc, char *argv[]) { k[1]=2; int index=1; int i,j; int num; int tmp; while(scanf("%d",&num)!=EOF) { if(index>=num) printf("%d\n",k[num]); else { for(i=index+1;i<=num;++i) { tmp=k[i-1]+1; while(1){ for(j=1;j<=index;++j) { if(tmp%k[j]==0) break; } if(j<=index) tmp++; else { k[i]=tmp; index++; break; } } } printf("%d\n",k[num]); } } return 0; } /************************************************************** Problem: 1040 User: zpy Language: C++ Result: Accepted Time:250 ms Memory:1060 kb ****************************************************************/方法三:素数筛法
8979
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; #define M 1000010 bool flag[M]; int prime[M]; void getprime() { int cnt=1; for(int i=2;i<M;++i) { if(!flag[i]) { prime[cnt++]=i; for(int j=i;j<M;j+=i) flag[j]=true; } } } int main(int argc, char *argv[]) { int k; getprime(); prime[0]=0; while(scanf("%d",&k)!=EOF) { printf("%d\n",prime[k]); } return 0; } /************************************************************** Problem: 1040 User: zpy Language: C++ Result: Accepted Time:10 ms Memory:6400 kb ****************************************************************/
相关文章推荐
- 【九度OJ】题目1040:Prime Number 解题报告
- 九度 oj 题目1040:Prime Number
- 九度OJ 1040 Prime Number (筛素数,试除法)
- 九度OJ 1040:Prime Number(质数) (递归)
- 九度OJ 1040:Prime Number(质数) (递归)
- 【九度】题目1040:Prime Number
- 题目 1040 Prime Number 九度Online Judge
- 九度题目1040:Prime Number
- 九度OJ 题目1006:ZOJ问题
- 九度OJ 题目1120:全排列
- 九度OJ:题目 1028 继续畅通工程
- 九度oj 题目1516:调整数组顺序使奇数位于偶数前面
- 九度oj 题目1059:abc
- 九度OJ题目1012:畅通工程
- 九度oj 题目1070:今年的第几天?
- 九度OJ题目1387斐波那契数列
- 九度oj 题目1202:排序
- <九度 OJ>题目1094:String Matching
- 九度OJ 题目1060:完数VS盈数
- 【九度OJ】题目1201:二叉排序树 解题报告