一、问题
Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
二、问题描述
质数指只能够被1和本身整除的数。
如果对13195分解质因数,其结果为5,7,13,29.
那么对600851475143进行分解质因数,其最大的质数为多少?
答案为:6857
三、第一遍刷Project Euler
思路:需要定义两个函数,第一个函数用于判断一个数是否为质数,以便于后续调用这个函数来找寻质因数,另一个函数用于分解一个数的质因数,然后将质因数保存到list中,并输出最后一个质数,输出结果即为我们所求的结果。下面直接给出代码:
python版本代码:
import numpy
# 判断一个数是否为质数
def is_prime(x):
for i in range(2, int(numpy.sqrt(x))+1): # 求平方根可以用numpy.sqrt()
if x % i == 0:
return False
return True
# 找出一个数的所有质数
def find_prime(y):
all_prime = [] # 定义一个list,用于存储所有质数
for j in range(2, (int(y**0.5)+1)): # 求平方根可以用y**0.5
if is_prime(j):
if y % j == 0:
y /= j
all_prime.append(j) # 将找到的质数放入list中
print(all_prime[-1]) # 打印最后一个质数
if __name__ == '__main__':
find_prime(600851475143)
C++版本代码需要用到vector,代码为:
#include<iostream>
#include<vector>
bool is_prime(int x)
{
for (int i = 2; i < ceil(sqrt(x)); i++)
{
if (x%i==0)
{
return false;
}
}
return true;
}
void main()
{
//需要注意的是这里的类型必须写成long long int
long long int input = 600851475143;
std::vector<int> all_prime;
for (int i = 2; i < ceil(sqrt(input)); i++)
{
if (is_prime(i))
{
if (input%i==0)
{
all_prime.push_back(i);
}
}
}
std::cout << all_prime.back() << std::endl;
system("pause");
}