题目描述
原题来自:NOIP 2012 普及组
已知正整数 nnn 是两个不同的质数的乘积,试求出较大的那个质数。
输入格式
输入只有一行,包含一个正整数 nnn。
输出格式
输出只有一行,包含一个正整数 ppp,即较大的那个质数。
样例
样例输入
21
样例输出
7
数据范围与提示
对于 30%30\%30% 的数据,n≤1000n\le 1000n≤1000;
对于全部数据,6≤n≤2×1096\le n\le 2\times 10^96≤n≤2×109。
质因数分解最后一个即为最大的那个质数
这里用到了一个定理:
任何一个大于1的正整数都能唯一分解有限个质数的乘积
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
int res;
void divi(int n)
{
for (int i = 2;i <= sqrt(n);i++) {
if (n%i == 0) {//i是质数
res = i;
while (n%i == 0) {//除掉所有的i
n /= i;
}
}
}
if (res > 1) res = n;//若最终剩下的数不等于1,则它一定是一个质数
}
int main()
{
int n;
cin >> n;
divi(n);
cout << res << endl;
return 0;
}
本文介绍了一种算法,用于解决NOIP2012普及组题目中寻找由两个不同质数相乘得到的正整数中较大质数的问题。通过质因数分解,确保了输出的是给定数值的最大质因数。
1329

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



