Project Euler__problem 3
2017-10-02 20:12
197 查看
做到第3题遇到
可以算得上是真正的数学难题
目前我的数学水平有限
看到题目就懵逼了一下,
前面2道题目我都习惯先用笔算算出结果,然后再用计算机去解出答案对照
What is the largest prime factor of the number 600851475143 ?
600851475143最大的质因数是多少?
但这道貌似数字过大,我数学水平到达不了这个水平
用C++的时间复杂度太大,算法太渣,算不出
我的思路是写一个fun函数找出一个数n的最大因数,再用函数zhishu判断最大因数是否为质数
否则的话继续找出最大因数的最大因数,以此类推找出最大的质因数。
当输入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
找回在中学时期做出数学题那种快感
可以算得上是真正的数学难题
目前我的数学水平有限
看到题目就懵逼了一下,
前面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
找回在中学时期做出数学题那种快感
相关文章推荐
- [Project Euler]加入欧拉 Problem 6
- [Project Euler] Problem 10
- [Project Euler] Problem 28
- Project Euler:Problem 12 Highly divisible triangular number
- Project Euler:Problem 21 Amicable numbers
- Project Euler:Problem 32 Pandigital products
- Project Euler:Problem 42 Coded triangle numbers
- Project Euler – Problem 17
- [Project Euler] Problem 49
- [Project Euler] Problem 51
- Project Euler:Problem 93 Arithmetic expressions
- [Project Euler] Problem 60 Deep First, Milestone, New Start
- 【Project Euler】【Problem 6】Sum square difference
- [Project Euler]加入欧拉 Problem 7
- [Project Euler]加入欧拉 Problem 15
- [Project Euler] Problem 11
- [Project Euler] Problem 25
- [Project Euler]Problem 7
- Project Euler:Problem 13 Large sum
- Project Euler:Problem 22 Names scores