【九度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- ...
随机推荐
- Macbookpro快捷键
Alt键代替 Option 键,用 Windows 标志键代替 Command 键. 但是,使用的时候,Command健类似于Windows的Control键. 1.复制.粘贴.剪切.全选.查找 Co ...
- 打造基于 PostgreSQL/openGauss 的分布式数据库解决方案
在 MySQL ShardingSphere-Proxy 逐渐成熟并被广泛采用的同时,ShardingSphere 团队也在 PostgreSQL ShardingSphere-Proxy 上持续发力 ...
- java输入代码
import java.util.Scanner; public class Demo59 { public static void main(String[] args) { / ...
- accommodate ~ ache
accommodate The accommodation reflex [反射] (or accommodation-convergence [会聚] reflex) is a reflex act ...
- 节省内存的循环banner(一)
循环banner是指scrollview首尾相连,循环播放的效果,使用非常广泛.例如淘宝的广告栏等. 如果是简单的做法可以把所有要显示的图片全部放进一个数组里,创建相同个数的图片视图来显示图片.这样的 ...
- vue-cli安装记录
docker安装 docker network rm mydkdocker network create --subnet=192.168.1.0/24 mydk cat centos-7-x86_ ...
- oralce 存储过程传入 record 类型的参数?
先定义一个 package , package中含有一个 record 类型的变量 create or replace package pkg_record is type emp_record is ...
- Java_zip_多源文件压缩到指定目录下
依赖: <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress --> <depend ...
- 【Java 8】函数式接口(二)—— 四大函数接口介绍
前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...
- 使用jquery完成抽奖图片滚动的效果
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>jq ...