【九度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 解题报告的更多相关文章

  1. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  2. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  5. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  6. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  7. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  8. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  9. 每日一九度之 题目1040:Prime Number

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6732 解决:2738 题目描述: Output the k-th prime number. 输入: k≤10000 输出: The k- ...

随机推荐

  1. Macbookpro快捷键

    Alt键代替 Option 键,用 Windows 标志键代替 Command 键. 但是,使用的时候,Command健类似于Windows的Control键. 1.复制.粘贴.剪切.全选.查找 Co ...

  2. 打造基于 PostgreSQL/openGauss 的分布式数据库解决方案

    在 MySQL ShardingSphere-Proxy 逐渐成熟并被广泛采用的同时,ShardingSphere 团队也在 PostgreSQL ShardingSphere-Proxy 上持续发力 ...

  3. java输入代码

    import java.util.Scanner; public class Demo59 {    public static void main(String[] args) {        / ...

  4. accommodate ~ ache

    accommodate The accommodation reflex [反射] (or accommodation-convergence [会聚] reflex) is a reflex act ...

  5. 节省内存的循环banner(一)

    循环banner是指scrollview首尾相连,循环播放的效果,使用非常广泛.例如淘宝的广告栏等. 如果是简单的做法可以把所有要显示的图片全部放进一个数组里,创建相同个数的图片视图来显示图片.这样的 ...

  6. vue-cli安装记录

    docker安装 docker network rm  mydkdocker network create --subnet=192.168.1.0/24 mydk cat centos-7-x86_ ...

  7. oralce 存储过程传入 record 类型的参数?

    先定义一个 package , package中含有一个 record 类型的变量 create or replace package pkg_record is type emp_record is ...

  8. Java_zip_多源文件压缩到指定目录下

    依赖: <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress --> <depend ...

  9. 【Java 8】函数式接口(二)—— 四大函数接口介绍

    前言 Java8中函数接口有很多,大概有几十个吧,具体究竟是多少我也数不清,所以一开始看的时候感觉一脸懵逼,不过其实根本没那么复杂,毕竟不应该也没必要把一个东西设计的很复杂. 几个单词 在学习了解之前 ...

  10. 使用jquery完成抽奖图片滚动的效果

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>jq ...