题目:
13195 的质数因子有 5, 7, 13 和 29。
600851475143 的最大质数因子是多少?
分析:刚开始写的时候,很麻烦,首先写了一个prime函数,然后又在主函数里写了一个循环来更新max(循环i从2到n,找出n的每一个质因数),这样一来,对于这道题,即便是long long类型有可能输出,但时间复杂度太高,效率太慢。
然后通过在网上了解到,任何一个合数都是可以由他的所有质因素相乘得到的,比如15=3*3*3*3*3,12=2*2*3,60=2*2*3*5。好的,我们先看一个比较小的数60,现在我们要找它的最大质因子,我们可以从最小数开始,从小数除起可以确保该数为质数,所以不必判断是否为质数,如果余数为零,那么它就是其中一个质因子。然后原数就可以除这个因子了,为了排除已经找到的因子,我们一直将它除这个数,直到不能整除,60/=2得30,30/=2得15,到此结束此因子,我们就找到了2这个质因子;同理,到3的时候15/=3得5,找到了3这个质因子;5/5=1,可以结束,5就是我们要找的最大质因子啦。
#include <stdio.h>
int main()
{
long long i,n;
scanf("%lld",&n);
for(i = 2; i <= n; i ++)/*从小数除起可以确保该数为质数所以不必判断是否为质