Project Euler__problem 3

来源:互联网 发布:域名怎么和服务器绑定 编辑:程序博客网 时间:2024/06/01 17:47

做到第3题遇到

可以算得上是真正的数学难题

目前我的数学水平有限

看到题目就懵逼了一下,

前面2道题目我都习惯先用笔算算出结果,然后再用计算机去解出答案对照


Largest prime factor

The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?


最大质因数

13195的所有质因数为5、7、13和29。

600851475143最大的质因数是多少?


但这道貌似数字过大,我数学水平到达不了这个水平

用C++的时间复杂度太大,算法太渣,算不出


我的思路是写一个fun函数找出一个数n的最大因数,再用函数zhishu判断最大因数是否为质数

否则的话继续找出最大因数的最大因数,以此类推找出最大的质因数。


#include<iostream>long long fun(long long n){long long a;for (a = n/2 + 1; a > 1; a--)if (n%a == 0){break;}else  continue;return a;}long zhishu(long long n){long long b;for (b = n/2 + 1; b > 1; b--){if (n % b != 0)continue;else break;}if (b == 1)return 1;else return 0;}void main(){long long a = fun(13195);while (!zhishu(a)){a = fun(a);}if(a==1)std::cout <<"该数没有质因数" << std::endl;else    std::cout << a << "是最大质因数" << std::endl;system("pause");}

当输入13195可以秒得该数没有质因数

但输入600851475143要等待,我就没有继续等

说到底还是数学不好啊,就一直问同学朋友有什么好方法可以算出来

他有的说用根号n  有的叫我列表

后来想出一个想法,不如找出一个因数就将n除一次

这样就可以实现快速变小,然后马上尝试去写代码

最后成功解决



#include<iostream>long long fun(long long n){long long a;for (a = 2; a < n; a++)if (n%a == 0)break;else  continue;return a;}void main(){long long num = 600851475143;long long a = fun(num);while (a != num){num = num / a;a = fun(num);}std::cout << num << "是最大质因数" << std::endl;system("pause");}

得出最后结果是6857

找回在中学时期做出数学题那种快感

哭




原创粉丝点击