欢迎阅读李文龙的博客
求解最大质因数,思路:
- 枚举2~sqrt(n)范围内所有数i
- 只要i是n的因子,就让n一直除i,并赋值给n,直到i不再是n的因子为止
- 在经历上述操作后,如果n仍然大于1,则次数为要求得的最大质因子。

代码[^code]
int GetMaxPrime(int n)
{
int i, ans = 0;
for (i = 2; i*i <= n; i++)
{
while (n%i == 0)
{
ans = i;
n /= i;
}
}
if (n > 1)ans = n;
return ans;
}
例子(西电考研复试C题)


#include <iostream>
#include <string>
#include <vector>
#include<math.h>
using namespace std;
int GetMaxPrime(int n);
int main()
{
int n, j = 0;//n输入几组数据,i计数器
cin >> n;
string a;
int b;//用于存放a字符串转换成的整数
vector<int>d;//用于存放结果
for(int i=0;i<n;i++)
{
cin >> a;
j = 0;
while (j < a.length())
{
if (a[j] < 48 || a[j]>57)
{
a.erase(j, 1);
}
else {
j++;
}
}
//将string转int
if (a.length() >= 1)//表示不为空
{
int temp = atoi(a.c_str());//string转int
b=temp;
}
else {
b=0;
}
d.push_back(GetMaxPrime(b));
}
for (int i = 0; i < d.size(); i++)
{
cout << d[i] << endl;
}
system("pause");
return 0;
}
int GetMaxPrime(int n)
{
int i, ans = 0;
for (i = 2; i*i <= n; i++)
{
while (n%i == 0)
{
ans = i;
n /= i;
}
}
if (n > 1)ans = n;
return ans;
}
1004

被折叠的 条评论
为什么被折叠?



