题目链接:牛客网甲级真题
题目简述:给定一个int
范围的数字,要求去找出它的最长连续因子,并输出。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, ans = -1, start = 0;//默认ans为-1,即没找到因子
cin >> n;
for (int i = 2; i <= sqrt(n); i++){
if(n % i == 0){//如果当前数字是n的一个因子
int m = n, temp = 0;
for (int j = i; j <= sqrt(n); j++){//求其连续的因子
if(m % j == 0){
m /= j;
temp++;
}
else break;
}
if(temp > ans){//更新最长的因子
ans = temp;
start = i;
}
}
}
if(ans == -1){//没找到其他的因子
cout << "1" << endl << n;
return 0;
}
cout << ans << endl << start;
for (int i = 1; i < ans;i++)
cout << "*" << start + i;
return 0;
}
这道题其实本质上就是找因子。容易想到判断一个数是否是质数的方法,与此类似,进行查找,只不过是在找到第一个因子后,还要继续往后找,看看能否连续起来。【注意:对于m和n的操作】
默认的话是个质数,这样只需输出本身即可。这是一个边界情况,要注意的到。