24小时热门版块排行榜    

CyRhmU.jpeg
查看: 3685  |  回复: 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的回帖

liandaoacc

新虫 (初入文坛)


小木虫: 金币+0.5, 给个红包,谢谢回帖
这是我写的,只验证了一些数,结果是对的,对于600851475143也是对的,但是没有经过仔细验证,所以不敢保证绝对对的。
#include <stdlib.h>
#include <map>
#include <iostream>
bool isPrime2(long n)
{
        if(n < 2)
                return false;
        if(n == 2)
                return true;
        if(n % 2 == 0)
                return false;
        for(long i = 3; i < n; i += 2)
        {
                if(n % i == 0)
                        return false;
        }
        return true;
}
void primeFactorDecomp(long long number, std::map<long, int> &primefactors)
{
        int size = primefactors.size();
        long beginprime = 2;
        long long numbercpy = number;
        int count = 0;
        if(size != 0)
        {
                std::map<long, int>::reverse_iterator rit = primefactors.rbegin();
                beginprime = rit->first;
                if(beginprime == 2)
                        beginprime += 1;
                else
                        beginprime += 2;
        }
        while(!isPrime2(beginprime))
        {
                beginprime += 2;
                if(beginprime > numbercpy)
                        return;
        }
        while(! (numbercpy % beginprime))
        {
                numbercpy /= beginprime;
                count++;
        }
        primefactors.insert(std::pair<long, int>(beginprime, count));
        primeFactorDecomp(numbercpy, primefactors);
}

int main(int argc, char** argv)
{
        long long number = 600851475143;
        std::map<long, int> primefactors;
        primeFactorDecomp(number, primefactors);
        std::map<long, int>::reverse_iterator rit = primefactors.rbegin();
        std::cout << rit ->first <<  '\n';
        return 0;
}
18楼2013-11-17 22:12:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 holmescn 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见