24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 3895  |  回复: 18
本帖产生 7 个 程序强帖 ,点击这里进行查看

holmescn

兑换贵宾

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

[交流] Euler 工程 第三题:寻找600851475143的最大质因子 已有7人参与

昨天没有放出第三题,今天赶早补上。
前两个题目都比较简单了,只要会基本的数学和编程语言,就可以完成。
第三题就有点意思了。

第三题:寻找一个合数的最大质因数

对一个数(非质数)进行因数分解,比如13195=5x7x13x29。最大的质因数是29.
那么 600851475143 怎么分解呢?最大的质因数又是多少?

[ Last edited by holmescn on 2011-5-12 at 15:06 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

holmescn

超级版主

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★
余泽成(金币+2): 辛苦了! 2011-05-11 23:01:56
其实有个作弊的解法哈哈,用Mathematica直接

FactorInteger[600851475143]

当然3楼的结果是对的。
不过,好像因为是线性查找,效率才不高。还有,干什么不从大到小找呢?那样快很快的。
4楼2011-05-10 14:40:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

微尘、梦想

主管区长

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
xzhdty(金币+1): 谢谢微尘、梦想 斑斑 2011-05-10 15:10:46
余泽成(程序强帖+1): 2011-05-12 19:07:28
CODE:
#include "stdio.h"
void main(void)
{
    int i,a;
    printf("请输入一个整数:" );
    scanf("%d",&a);

    for(i=2;a!=1;i++)
        if(a%i==0)
        {
            a/=i;
            printf("%d\t",i);
            i--;
        }
        printf("\n" );
}

由于32位内存的限制,无法求出太大的数!

[ Last edited by 微尘、梦想 on 2011-5-12 at 16:19 ]
任风云变幻,我笑对人生!
2楼2011-05-10 13:19:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

专家顾问

骠骑将军

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
xzhdty(金币+2): 呵呵谢谢应助 2011-05-10 15:11:23
余泽成(程序强帖+1): 2011-05-12 19:07:37
此题很变态,matlab运行55s,
CODE:
function result = euler3()
tic;
result = 0;
n = 600851475143;
for i=3:sqrt(n)
    if isprime(i)==1 && mod(n,i)==0
        result = i;
    end
end
toc;
end

答案
CODE:
Elapsed time is 55.277722 seconds.
ans =
        6857

[ Last edited by libralibra on 2011-5-10 at 16:46 ]
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2011-05-10 13:58:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

实习版主

骠骑将军

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-10 19:08:53
引用回帖:
Originally posted by holmescn at 2011-05-10 14:40:09:
其实有个作弊的解法哈哈,用Mathematica直接

FactorInteger[600851475143]

当然3楼的结果是对的。
不过,好像因为是线性查找,效率才不高。还有,干什么不从大到小找呢?那样快很快的。

CODE:
sqrt(600851475143)
ans =
          775146.099224527

结果是6857,从小到大快,只检测了6800多个数
从大到小,要检测77万多个数,时间就长了.呵呵
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
5楼2011-05-10 16:50:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

兑换贵宾

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
微尘、梦想(金币+2): 谢谢参与! 2011-05-10 19:08:27
引用回帖:
Originally posted by libralibra at 2011-05-10 16:50:34:
CODE:
sqrt(600851475143)
ans =
          775146.099224527

结果是6857,从小到大快,只检测了6800多个数
从大到小,要检测77万多个数,时间就长了.呵呵

如果从小到大检测的话

意味着需要验证求出的质因数是否是最大(不然怎么知道是最大质因数而没有更大的呢?),如果这么做会浪费更多时间

不如从大到小判定了...


PS:
路过...话说看到标题里面的分类是【其他】....我还以为是不熟悉的领域呢...原来是编程题啊....=,=|||会不会也有别人有同样的感觉然后就没打开帖子看看?

[ Last edited by sudo on 2011-5-10 at 18:50 ]
6楼2011-05-10 18:47:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

专家顾问

骠骑将军

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+1): 鼓励交流! 2011-05-11 23:02:19
sudo所言极是,呵呵,
从大到小,找到直接就break,的确循环次数少
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
7楼2011-05-10 21:09:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

管理员

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖
余泽成(金币+2): 鼓励交流! 2011-05-12 19:06:10
咳,其实这个问题相当有现实意义了...

看雪的密码学小组一直在研究这个....

目前貌似100位以下的整数的最快方法是二次筛法(咳在一本数论书里面说是115位),然后以上的目前最快的方法是数域筛法

谁来挑战一下二次筛法?
8楼2011-05-12 08:35:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

管理员

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★
余泽成(金币+2, 程序强帖+1): 辛苦了! 2011-05-12 19:08:14
写了一个python版的,不知道算不算筛选的。
CODE:
import timeit
from math import sqrt

def euler3():
    n = 600851475143

    primes = range(2, int(sqrt(n)))

    while n > 1:
        prime = primes[0]
        if n % prime == 0:
            print prime
            n = n / prime
        primes = [x for x in primes if x % prime != 0]


t = timeit.Timer("euler3.euler3()", "import euler3")
print t.timeit(1)

在我的电脑上用时不到20秒
不过,应该还能优化。因为用Mathematica不到1秒

PS:这个sqrt(n)假设好像有问题啊。比如本题的数分解为71, 839, 1471, 6857,如果是后两个数的积是10086647,开根号是3175.9,显然找不到后面一个数了啊。

[ Last edited by holmescn on 2011-5-12 at 11:15 ]
9楼2011-05-12 10:14:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

主管区长

优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!优秀!!有木有!!!

★ ★
余泽成(金币+2): 呵呵! 2011-05-12 19:08:26
非常的悲催啊,同样的算法,在matlab里只用不到7秒
CODE:
n = 600851475143;
tic;
primes = 2:round(sqrt(n));
while n > 1
    prime = primes(1);
    if mod(n, prime) == 0
        disp(num2str(prime));
        n = n / prime;
    end
    primes(find(mod(primes, prime)==0)) = [];
end
toc

10楼2011-05-12 10:31:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 271求调剂 +9 勒布朗@ 2026-03-31 11/550 2026-04-01 01:32 by 1018329917
[考研] 考研调剂 +6 Amber00 2026-03-31 6/300 2026-04-01 00:42 by fmesaito
[考研] 08工科275分求调剂 +6 AaAa7420 2026-03-31 6/300 2026-03-31 21:27 by XBbbb13
[考研] 352分-085602-一志愿985 +6 海纳百川Ly 2026-03-29 6/300 2026-03-31 21:06 by yuq
[考研] 考研材料工程351分调剂 +4 整个好的 2026-03-31 4/200 2026-03-31 19:36 by 难0121
[考研] 安徽大学专硕生物与医药专业(086000)324分,英语已过四六级,六级521,求调剂 +10 美味可乐鸡翅 2026-03-26 11/550 2026-03-31 19:20 by syh9288
[考研] 生物学296求调剂 +8 汤圆包 2026-03-29 12/600 2026-03-31 17:05 by 18828373951
[考研] 化学0703 调剂 306分 一志愿211 +10 26要上岸 2026-03-28 10/500 2026-03-31 16:04 by 记事本2026
[考研] 本科211安全工程,初试290分,求调剂 +3 2719846834 2026-03-28 3/150 2026-03-31 13:52 by 热情沙漠
[考研] 293分求调剂,外语为俄语 +5 加一一九 2026-03-31 5/250 2026-03-31 09:39 by zhshch
[考研] 调剂 +4 GK72 2026-03-30 4/200 2026-03-30 20:32 by dick_runner
[考研] 生物学学硕,一志愿湖南大学,初试成绩338 +7 YYYYYNNNNN 2026-03-26 9/450 2026-03-30 20:29 by YYYYYNNNNN
[考研] 329求调剂 +8 星野? 2026-03-26 8/400 2026-03-30 13:41 by chemdavid
[考研] 321求调剂 +7 璞玉~~ 2026-03-25 8/400 2026-03-29 06:41 by 544594351
[考研] 283求调剂 +7 A child 2026-03-28 7/350 2026-03-28 12:05 by zllcz
[考研] 340求调剂 +5 jhx777 2026-03-27 5/250 2026-03-28 04:18 by fmesaito
[考研] 一志愿上海理工能源动力(085800)310分求调剂 +3 zhangmingc 2026-03-27 4/200 2026-03-27 19:01 by 给你你注意休息
[考研] 化学调剂一志愿上海交通大学336分-本科上海211 +4 小鱼爱有机 2026-03-25 4/200 2026-03-26 10:19 by aa331100
[考研] 07化学303求调剂 +5 睿08 2026-03-25 5/250 2026-03-25 22:46 by 418490947
[考研] 求调剂 +3 李李不服输 2026-03-25 3/150 2026-03-25 13:03 by cmz0325
信息提示
请填处理意见