【九度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. 【NCBI教程】资源汇总整理 (转载)

    主题 网址 备注 [NCBI教程]资源汇总整理 http://www.omicshare.com/forum/thread-200-1-1.html (出处: OmicShare Forum)

  2. mongodb存储的基本使用

    Python连接mongodb一般使用pymongo模块 1. pymongo模块的简单使用 ### MongoDB存储 ## 连接MongoDB import pymongo # 建立连接对象,2种 ...

  3. Demo04分解质因数

    package 习题集1;import java.util.Scanner;//将一个正整数分解质因数.例如输入90,打印出90=2*3*3*5public class Demo04 { public ...

  4. linux 实用指令时间日期类

    linux 使用指令时间日期类 data 显示当前日期 基本语法 date 显示当前时间 date+%Y 显示当前年份 date+%m 显示当前月份 date+%d 显示当前是哪一天 date &qu ...

  5. C++ 成绩排名

    1004 成绩排名 (20分)   读入 n(>)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 ...

  6. 如何从 100 亿 URL 中找出相同的 URL?

    题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. 解答思路 每个 URL 占 64B,那么 50 亿 ...

  7. 隐藏状态栏后tableview自动上移20个像素的问题

    最近在开发过程中碰到一个很奇怪的问题,将状态栏隐藏掉之后,页面上的tableView会自动上移20个像素. 这是因为在iOS7.0之后,系统会自动调整scrollView的layout 和 conte ...

  8. android 防止R被混淆,R类反射混淆,找不到资源ID

    在Proguard.cfg中添加 -keep class **.R$* { *;   }

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

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

  10. 使用 ACE 库框架在 UNIX 中开发高性能并发应用

    使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论 ...