小说神话版三国国中关于素数的题目怎么做

求大神帮忙做一个VB题。题目如下_百度知道神话版三国txt精校版_百度知道神话版三国无弹窗(坟土荒草),神话版三国全文阅读,神话版三国笔趣阁-书阁网
& 架空历史
& 神话版三国最新章节列表
&&&&陈曦看着将一块数百斤巨石撇出去的士卒,无语望苍天,这真的是东汉末年?&&&&吕布单枪匹马凿穿万人部队,这怎么看都不科学。&&&&赵子龙真心龙魂附体了,一剑断山,这真的是人?&&&&典韦单人护着曹操杀出敌营,顺手宰了对面数千步骑,这战
给喜欢的小说评分:
《神话版三国》最新章节(提示:已启用缓存技术,最新章节可能会延时显示,登录书架即可实时查看。)
《神话版三国》作品相关
《神话版三国》正文
《神话版三国》VIP卷九度oj(64)
代码(65)
题目描述:
Output the k-th prime number.
The k-th prime number.
样例输入:
样例输出:
我已经把边边角角的算法能节省时间的都节省了,比如把目前已知的素数的结果存储起来,如果下一个测试用例的值小于先前的值,那么可以直接查出结果。但是还是不行,核心的判断是不是素数的算法还是太浪费时间了。(第一种方法)然后我又只判断奇数,节约一半时间,但还是超时。
本题思路如下:
一般素数判断方法常用一下三种:
1、最简单的方法:该算法的思想就是用2~sqrt(N),依次去对N求余,只要有一个余数是0,则N就不是素数。该方法虽然思路简单,但效率太低。故不适合于大范围的素数判断。
2、筛选法:该方法不是用来具体判断一个数是否是素数,而是用于判断一个范围内所有的素数。该方法的原理是:首先生成数组,然后从第一个开始依次标注它的倍数,然后从下一个没有被标注的开始,标注它所有的倍数,这样依次下去,最后没有被标注的都是素数。(本题所推荐采用的方法)
3、素数判断法:任何一个合数都可以表现为适当个素数的乘积的形式,所以我们只用素数去除要判断的数即可,比如要判断100以内的素数,只用2,3,5,7就够了,10000以内的数用100以内的素数判断足以。(该方法效率最高,但适应性不高,只适合不大的数)
注:以上方法并非判断素数全部方法,而且每一种方法都可进一步改进。
第一种方法得知第10000个素数为104729,所以就给了第二种方法的范围。
我的第一种方法(超时,结果正确):
#include&iostream&
#include&fstream&
int main()
int k, i, num, result[10001] = {0}, m = 1;
ifstream cin(&data.txt&);
while (cin && k)
result[1] = 2;
if (result[k] != 0)
cout && result[k] &&
if (result[m] % 2 == 1)
num = result[m] + 2;
num = result[m] + 1;
//从3开始判断
for (i = 2; i & i ++)
if (num % i == 0)
if (i == num)
//是素数,存储起来
result[m] =
if (k == m)
//只判断奇数,这样节约一半的时间
cout && result[k] &&
system(&pause&);
我的第二种方法,AC了:
#include&iostream&
#include&fstream&
#define MAX 105000
int main()
int k, i, j, result[MAX] = { 0 }, count = 0;//全初始化为0,结果中0表示为素数,1表示不是素数
ifstream cin(&data.txt&);
while (cin && k)
result[0] = 1, result[1] = 1, result[2] = 0;
for (i = 2; i &= MAX; i++)
for (j = 2; j &= MAX && i*j &= MAX; j++)
result[i*j] = 1;
count = 0;
while (count & k)
if (result[i] == 0)
cout && i - 1 &&
system(&pause&);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3410次
排名:千里之外
原创:72篇}

我要回帖

更多关于 神话版三国 笔趣阁 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信