【九度OJ】题目1040:Prime Number 解题报告
【九度OJ】题目1040:Prime Number 解题报告
标签(空格分隔): 九度OJ
原题地址:http://ac.jobdu.com/problem.php?pid=1040
题目描述:
Output the k-th prime number.
输入:
k≤10000
输出:
The k-th prime number.
样例输入:
3
7
样例输出:
5
17
Ways
首先用C++做了一遍,刚开始没有AC的原因是判断素数的函数写的不对,没有处理2这个情况。后来发现每次停止循环的时候,i都比要求的素数大1.所以复习了一下for循环的三条语句的执行顺序。
for(表达式1;表达式2;表达式3)
{循环体}
第一步,先对表达式1赋初值;
第二步,判别表达式2是否满足给定条件,
若其值为真,满足循环条件,则执行循环体内语句,
然后执行表达式3,然后进入第二次循环。
若判断表达式2的值为假,就终止for循环,执行循环体外语句。
这也就是说,当循环结束之后,当前的i的值是不满足判定条件的。这点注意。
比如以下代码中,假设k=3,最后一次循环时,先执行i++得到i的值为6,在判断count值为3不满足判定条件,然后结束。所以最终结果应该为i-1;
#include <stdio.h>
#include <math.h>
bool isPrime(int n) {
if (n <= 1) {
return false;
} else if (n == 2) {
return true;
}
for (int i = 2; i <= (int) sqrt(n) + 1; i++) {
if (n % i == 0) {
return false;
}
}
return true;//是否为素数,别弄反
}
int main() {
int k;
while (scanf("%d", &k) != EOF) {
int count = 0;
int i;
for (i = 2; count < k; i++) {
if (isPrime(i)) {
count++;
}
}
printf("%d\n", i - 1);
}
return 0;
}
我再一次想到BitInteger,但是很遗憾,这个题超时了,以下代码不符合时间要求。
import java.util.*;
import java.math.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int k = scanner.nextInt();
int count = 0;
BigInteger x = new BigInteger("1");
while(count < k){
x = x.nextProbablePrime();
count++;
}
System.out.println(x.toString());
}
}
}
想到了素数筛法.
刚开始没AC,经过我测试,是因为到达k=1230以后结果都是0了,不知道怎么回事。后来发现是数字给的范围太小啊,扩大范围就好了啊。
所以把prime和flag都扩大到1000001,毕竟素数还是挺稀少的,要找到第10000个素数的时候,要范围可能已经很大。经测试,第10000个素数是104729。
另外之前一直出错的地方是少了if(i >= 10000) continue;
,导致j = i * i
超出数组边界。
下面是AC的代码。
#include <stdio.h>
int prime[1000001];
int flag[1000001];
int size;
void init() {
size = 0;
for (int i = 1; i <= 1000000; i++) {
flag[i] = false;
}
for (int i = 2; i <= 1000000; i++) {
if (flag[i]) {
continue;
}
prime[size++] = i;
if(i >= 10000) continue;
for (int j = i * i; j <= 1000000; j += i) {
flag[j] = true;
}
}
}
int main() {
init();
int k;
while (scanf("%d", &k) != EOF) {
printf("%d\n", prime[k - 1]);
}
return 0;
}
Date
2017 年 3 月 7 日
【九度OJ】题目1040:Prime Number 解题报告的更多相关文章
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
- 每日一九度之 题目1040:Prime Number
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6732 解决:2738 题目描述: Output the k-th prime number. 输入: k≤10000 输出: The k- ...
随机推荐
- kubernetes 用到的工具及组件
kubernetes 用到的工具及组件,将所有的组件下载后放到/usr/local/bin目录下(记得chmod a+x /usr/local/bin/*).所有的组件,原则上都用最新的,如果遇到不支 ...
- centos安装后的个人工具
1.安装vim工具 yum -y install vim 安装完成后在家目录下新建一个.vimrc的配置文件.辅助vim软件功能. set number " 显示行号 set cursorl ...
- 微信小程序扫描普通二维码打开小程序的方法
很久没有写博客了,之前换了一份工作,很久没有做Android开发了,现在转做前端开发了,记录一下遇到的问题及解决的方法. 最近做微信小程序开发,遇到一个需求,后台管理系统生成的问卷和投票会有一个二维码 ...
- Go 性能提升tips--边界检查
1. 什么是边界检查? 边界检查,英文名 Bounds Check Elimination,简称为 BCE.它是 Go 语言中防止数组.切片越界而导致内存不安全的检查手段.如果检查下标已经越界了,就会 ...
- git 新建分支并切换到该分支_Git 从master拉取代码创建新分支 并且再将修改合并到master...
开发过程中会从master主分支copy到另一个开发分支: 1.切换到master分支 git checkout master 2.获取最新的代码 git pull origin master 3 ...
- c++基础知识03
1.嵌套循环案例--九九乘法表 int main() { //利用嵌套循环乘法口诀表 for (int n = 1; n <= 9; n++) { for (int m = 1; m <= ...
- Java 堆、栈、队列(遇见再更新)
目录 Java 栈.队列 栈 常用方法 案例 队列 Java 栈.队列 栈 常用方法 boolean empty() 测试堆栈是否为空 Object peek() 查看堆栈顶部的对象 Object p ...
- A Child's History of England.44
At this period of his reign, when his troubles seemed so few and his prospects so bright, those dome ...
- day13 装饰器与语法糖
day13 装饰器与语法糖 一.装饰器 1.什么是装饰器 装饰器就是装饰别人的工具,具体是指为被装饰者添加新功能 装饰器->函数 被装饰者->函数 2.为何要用装饰器 装饰器的核心思想:( ...
- nodejs-Child Process模块
JavaScript 标准参考教程(alpha) 草稿二:Node.js Child Process模块 GitHub TOP Child Process模块 来自<JavaScript 标准参 ...