您的位置:首页 > 其它

Project Euler__problem 3

2017-10-02 20:12 197 查看
做到第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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: