计算并输出某整数的最大素因子
题目描述
对于给定的字符序列,从左至右将所有的数字字符取出拼接成一个无符号整数(字符序列长度小于100,拼接出的整数小于2^31,),计算并输出该整数的最大素因子(如果是素数,则其最大因子为自身)
算法
主要是缩减时间复杂度
利用传统的判断素数的方法,用max找到最大的素因数,之后将d除以这个因数,循环计算,知道d对这个因数不能整除,接着来判断d是不是还可以整除更大的数,直到d也变成素数,最后输出素因数与d的较大值,整个算法的时间复杂度为O(sqrt(log(n)))
代码(c++)
#include<bits/stdc++.h>
using namespace std;
string str;
int Su(int d){
int max=0;
for(int i=2;i*i<=d;i++){
while(d%i==0){
if(i>max)
max=i;
d/=i;
}
}
return d>max?d:max;
}
int main()
{
int number;
int ans;
int n;
cin>>n;
for(int j=0;j<n;j++){
cin>>str;
number=0;
ans=0;
for(int i=0;i<str.size();i++){
if(str[i]>='0'&&str[i]<='9'){
number=number*10+(int)(str[i]-'0');
}
}
if(number==0){
ans=0;
}
else{
ans=Su(number);
}
cout<<ans<<endl;
}
return 0;
}