Euler
最大质因数
内存限制:128 MB时间限制:10.000 S
题目描述
13195的所有质因数为5、7、13和29。
那么,n的最大的质因数是多少?
输入
一个整数n(n<)
输出
一行,一个整数表示n的最大质因数
样例输入
13195
样例输出
29
思路分析
从小到大,找出n的所有质因数。每找到一个质因数i,就记ans=i,并while循环n/i直至n不能整除i。
如果以上操作结束后,n>1,此时的n就是要求的最大质因数。
代码
#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
ll n,ans;
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(ll i=2;i*i<=n;i++){while(n%i==0){ans=i;n/=i;}}if(n>1){ans=n;}cout<<ans;return 0;
}
(如果先处理因子2,再循环处理奇数因子,会快一点)
#include<bits/stdc++.h>
#define ll unsigned long long
using namespace std;
ll n,ans;
int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;while(n%2==0){ans=2;n/=2;}for(ll i=3;i*i<=n;i+=2){while(n%i==0){ans=i;n/=i;}}if(n>1){ans=n;}cout<<ans;return 0;
}