版块导航
正在加载中...
客户端APP下载
论文辅导
申博辅导
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(3773)
>
文献求助
(263)
>
导师招生
(194)
>
考博
(126)
>
硕博家园
(98)
>
虫友互识
(87)
>
论文投稿
(65)
>
休闲灌水
(64)
>
招聘信息布告栏
(62)
>
博后之家
(57)
>
考研
(57)
>
公派出国
(51)
>
论文道贺祈福
(40)
>
找工作
(35)
>
基金申请
(34)
>
绿色求助(高悬赏)
(32)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
程序语言
»
其它
»
Euler 工程 第十题:计算小于2百万的所有质数的和
7
1/1
返回列表
查看: 1514 | 回复: 6
只看楼主
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
本帖产生 3 个 程序强帖 ,点击这里进行查看
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
散金: 275
红花: 1
帖子: 699
在线: 102.6小时
虫号: 913482
注册: 2009-11-26
性别: GG
专业: 凝聚态物性 II :电子结构
[交流]
Euler 工程 第十题:计算小于2百万的所有质数的和
已有3人参与
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.
小于10的所有质数的和为:2+3+5+7 = 17
那么小于2百万的所有质数的和是多少?
PS:最近的关于质数的问题还真是多啊,哈哈。
PS2:到第10题了,这个题的解出率已经是第一题的一半还不到了。
回复此楼
» 猜你喜欢
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有6人回复
2025冷门绝学什么时候出结果
已经有4人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有8人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有5人回复
论文投稿,期刊推荐
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
孩子确诊有中度注意力缺陷
已经有14人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
高级回复
» 本主题相关价值贴推荐,对您同样有帮助:
Euler 工程 第四十四题
已经有4人回复
Euler 工程 第四十二题: 三角词
已经有4人回复
Euler 工程 第四十一题
已经有5人回复
Euler 工程 第三十八题
已经有9人回复
Euler 工程 第三十七题
已经有6人回复
Euler 工程 第三十六题:
已经有18人回复
Euler 工程 第三十五题:循环质数
已经有16人回复
Euler 工程 第三十二题:pandigital 数
已经有3人回复
Euler 工程 第三十一题: 换零钱
已经有10人回复
Euler 工程 第三十题
已经有12人回复
Euler 工程 第廿九题:有多少不同的项?
已经有30人回复
Euler 工程 第廿八题:旋转矩阵对角线的和
已经有6人回复
Euler 工程 第廿七题:系数的积
已经有15人回复
Euler 工程 第廿六题:最长的循环节
已经有9人回复
Euler 工程 第廿五题:Fibonacci 数列第一个包含1000个数字的项
已经有3人回复
Euler 工程 第廿四题:全排列的第100万项
已经有19人回复
Euler 工程 第廿三题:
已经有16人回复
Euler 工程 第廿二题: 姓的总分
已经有13人回复
Euler 工程 第廿题:100! 的各项和
已经有5人回复
Euler 工程 第十九题:每月第一天是周日的天数
已经有4人回复
Euler 工程 第十八题:三角阵上最大的和
已经有12人回复
Euler 工程第十六题:2的1000次方的各项和
已经有14人回复
Euler 工程 第14题:找最长的数列
已经有9人回复
Euler 工程 第十一题:相邻元素乘积最大
已经有10人回复
Euler 工程 第三题:寻找600851475143的最大质因子
已经有18人回复
1楼
2011-05-15 08:14:34
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
huycwork
金虫
(著名写手)
程序强帖: 22
应助: 0
(幼儿园)
金币: 953
散金: 663
红花: 8
沙发: 13
帖子: 1080
在线: 264.1小时
虫号: 1257243
注册: 2011-04-06
专业: 金融学
★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
余泽成(金币+1): 谢谢参与讨论! 2011-05-15 19:21:06
只是这些质数问题,侧重点各有不同,第三题要求找出最大质数,第七题要求解出第10001个质数,而这一题根本不要求测试出所有质数,只是求和而已,解法应该也有特殊之处。
赞
一下
(2人)
回复此楼
漩涡的中心有一块空地,空空的。
2楼
2011-05-15 08:44:32
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
libralibra
至尊木虫
(著名写手)
骠骑将军
程序强帖: 40
应助: 817
(博后)
金币: 12914.1
红花: 64
帖子: 2238
在线: 287.3小时
虫号: 696514
注册: 2009-02-05
专业: 计算机软件
★ ★ ★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
余泽成(金币+3): 谢谢参与交流! 2011-05-15 19:21:33
还是老规矩,先来个偷懒的解法
CODE:
function result = euler10()
tic;
result = sum(primes(2000000));
toc;
end
结果+运行时间
CODE:
% Elapsed time is 0.087248 seconds.
% ans =
% 142913828922
赞
一下
(2人)
回复此楼
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼
2011-05-15 14:56:17
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
huycwork
金虫
(著名写手)
程序强帖: 22
应助: 0
(幼儿园)
金币: 953
散金: 663
红花: 8
沙发: 13
帖子: 1080
在线: 264.1小时
虫号: 1257243
注册: 2011-04-06
专业: 金融学
★ ★ ★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 谢谢参与交流! 2011-05-15 19:21:47
我先前说的素数算法的实现,偶数部分没有优化,效率看起来还算不错~第七题都没人管了,就发这吧:
CODE:
#include
#include
using namespace std;
enum {
BUFSZ = 10000,//这个限制产生性能瓶颈,设置越大,性能就越好
NPRI = 10001 //这个数据就需要估计了,不想估计,就直接vector吧:)
};
bool buf[BUFSZ];
size_t primer[NPRI];
size_t eular7(size_t nprimer = 10001){
size_t offset = 0, *prip, *cprip;
int top;//记录素数数
int falc;//排除的数
bool *bufp;
primer[0] = 2;//负责偶数部分
primer[1] = 3;
primer[2] = 5;
top = 3;
//如果从1开始会把所有的数都false了,offset必须比1要大
offset += 5;
while(1){
for(size_t i = 0; i < BUFSZ; ++i)
buf[i] = true;
falc = 0;
prip = primer;
cprip = primer + top;
bufp = buf;
NEWPRI: //每当有新的素数就跳回来
//检查每个已知的素数,这部分可能有bug,测试的时候感觉有点问题
while(prip - primer < top){
size_t mod = offset%(*prip);
if(mod == 0){
buf[0] = false;
++falc;
}
for(size_t i = *prip - mod; i < BUFSZ; i+=*prip){
if(buf[i])
++falc;
buf[i] = false;
}
++prip;//这个指针保证,不会重复遍历素数表
}
//添加未知的素数,每次只添加一个
for(int i = bufp - buf; i < BUFSZ; ++i){
if(buf[i]){
primer[top++] = offset + i;
if(top == nprimer)
goto DONE;
bufp = buf+i;//这个指针保证,不会重复检查缓冲数表
if(falc + prip - cprip < BUFSZ)
goto NEWPRI;
}
}
offset += BUFSZ;
}
DONE:
return primer[nprimer-1];
}
int main(){
time_t t1, t2;
t1 = time(0);
size_t res = eular7();
t2 = time(0);
cout<<"result:"<
cout<<"cost:"<
return 0;
}
如果要适应这题,修改终止条件即可。
赞
一下
(2人)
回复此楼
漩涡的中心有一块空地,空空的。
4楼
2011-05-15 15:45:50
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
holmescn
金虫
(正式写手)
程序强帖: 37
应助: 1
(幼儿园)
金币: 1918.8
散金: 275
红花: 1
帖子: 699
在线: 102.6小时
虫号: 913482
注册: 2009-11-26
性别: GG
专业: 凝聚态物性 II :电子结构
★ ★
余泽成(金币+2, 程序强帖+1): 谢谢参与交流! 2011-05-18 17:05:42
看了huycwork的代码,感觉不太好,用了goto的话,就bad smell了。我写了一个没有goto的版本不过,可能有地方会重叠,造成速度慢。
CODE:
#include
#include
#include
#define PRIMESZ 100002
#define BUFSZ 10000
int nthPrime(int nth) {
// 总共的质数集
int primes[PRIMESZ];
// 每次过滤用的buffer
int buf[BUFSZ];
// 已知的质数个数
int amountOfPrimes;
// 记录buffer的第一个数
// 最后一个数以及下一个
// 是当前质数的倍数的数
int next, first, last;
int i, j;
// 先给两个质数
primes[0] = 2;
primes[1] = 3;
amountOfPrimes = 2;
last = 3;
while (amountOfPrimes < nth) {
// 填充buffer, 不要偶数
// 这里从最大质数开始,选BUFSZ个数
// 可能有些数会被重复查找
// 但可以防止漏掉数
for(i = 0; i < BUFSZ; i++) {
buf[i] = primes[amountOfPrimes - 1] + i*2;
}
// 保存第一个数和最后一个数,因为可能被修改
first = buf[0];
last = buf[BUFSZ-1];
for(i = 1; i < amountOfPrimes; i++) {
// 下一个大于first但是primes[i]的倍数的数
next = ceil(first * 1.0 / primes[i]);
// 防止得到偶数
if (next % 2 == 0) next += 1;
// 过滤掉primes[i]的倍数
// 这里我想了很久......
// 主要是脑子不够用
for(j = next * primes[i]; j <= last; j += primes[i]*2) {
buf[(j - first)/2] = 0;
}
}
// 把过滤完了的质数加到primes里
// 不能加得太多,因为可能有些质数还没有在primes里
// 这些质数的倍数可能会被加进来
for(j = 0; j < (BUFSZ < amountOfPrimes?BUFSZ:amountOfPrimes); j++) {
if(buf[j]) {
primes[amountOfPrimes++] = buf[j];
}
// 够数了就别再加了
if(amountOfPrimes > PRIMESZ)
break;
}
}
return primes[nth-1];
}
int main(int argc, char** argv){
time_t t;
t = time(0);
printf("nthPrimes = %d\n", nthPrime(100001));
printf("%d\n", time(0)-t);
return 0;
}
赞
一下
(1人)
回复此楼
5楼
2011-05-18 14:35:44
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
huycwork
金虫
(著名写手)
程序强帖: 22
应助: 0
(幼儿园)
金币: 953
散金: 663
红花: 8
沙发: 13
帖子: 1080
在线: 264.1小时
虫号: 1257243
注册: 2011-04-06
专业: 金融学
★ ★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
余泽成(金币+2): 鼓励交流! 2011-05-18 17:06:02
引用回帖:
Originally posted by
holmescn
at 2011-05-18 14:35:44:
看了huycwork的代码,感觉不太好,用了goto的话,就bad smell了。我写了一个没有goto的版本不过,可能有地方会重叠,造成速度慢。
[code]
#include<stdio.h>
#include<math.h>
#include<tim ...
呃,不要goto的版本只需要用return替换掉第一个goto,把while拷贝到第二个goto即可,不过,代码看起来可能更bad诶……
赞
一下
(2人)
回复此楼
漩涡的中心有一块空地,空空的。
6楼
2011-05-18 15:01:27
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
匿名
用户注销
(小有名气)
程序强帖: 3
应助: 2
(幼儿园)
金币: 607.7
散金: 150
红花: 2
帖子: 195
在线: 104小时
虫号: 0
注册: 2010-12-03
专业: 动力学与控制
★ ★ ★ ★
小木虫(金币
+0.5
):给个红包,谢谢回帖
余泽成(金币+3, 程序强帖+1): 鼓励参与交流! 2011-05-24 12:38:22
本帖仅楼主可见
赞
一下
7楼
2011-05-24 09:58:17
已阅
回复此楼
编辑
查看我的主页
相关版块跳转
第一性原理
量子化学
计算模拟
分子模拟
仿真模拟
程序语言
我要订阅楼主
holmescn
的主题更新
7
1/1
返回列表
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
高级回复
(可上传附件)
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定