小韦老师@NOIP 普及组-2012-质因数分解
题目:
描述
已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。
输入
输入只有一行,包含一个正整数 n。
输出
输出只有一行,包含一个正整数 p,即较大的那个质数。
输入样例1
21
输出样例1
7
提示
对于 60% 的数据,6 ≤ n ≤ 1000。对于 100% 的数据,6 ≤ n ≤ 2*10^9
题解:
思路:
整体思路:
首先要知道唯一分解定理:一个数能且只能分解为一组质数的乘积。可知,若输入的数满足题目条件,他就只能分解为两个质数的乘积。所以在比他小且大于 1 的自然数中,只有那两个数能整除它,之间不可能再有任何合数或质数能整除它了,因为最小的能整除它的合数已经是他本身了。
具体步骤:
1.定义 n,并输入 n。
2.枚举 2~n-1,若当前数能整除 n,则当前数位较小的那个质因数,则 n 除以当前数即为较大的质因数:
for(int i = 2; i < n; i++) { // 枚举 2~n-1
if(n % i == 0) { // 若 i 能整除 n,则 i 为较小的那个质因数
cout << n / i; // 输出较大的质因数
break; // 记得退出循环
}
}
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
for(int i = 2; i < n; i++) { // 枚举 2~n-1
if(n % i == 0) { // 若 i 能整除 n,则 i 为较小的那个质因数
cout << n / i; // 输出较大的质因数
break; // 记得退出循环
}
}
return 0;
}