质因数分解
描述
已知正整数n是两个不同的质数的乘积,试求出较大的那个质数。
输入
每组输入数据只有一行,包含一个正整数n。
数据规模:
对于60%的数据,6≤n≤1000。
对于100%的数据,6≤n≤2*10^9。
输出
每组输出只有一行,包含一个正整数p,即较大的那个质数。
输入样例 1
21
输出样例 1
7
来源
NOIP全国联赛普及组-2012年NOIP全国联赛普及组
题解:
枚举出第一个质因子即可。
a * b = c
要求a时质数,b时质数,并且a和b都是c的因子。
从2~根号c开始枚举a
枚举的第一个c的因子一定是质数,因为如果是合数,它一定可以由前面的质数乘积构成,前面质数不是c的因子,这个合数也一定不是,所以枚举到合数直接跳过,枚举到的第一个一定是质数。反证法:如果枚举到的第一个c的因子是合数,那么它前面的质数乘积一定是c的因子,前面的质数一定是c的因子,与前面的质数不是c的因子矛盾,所以枚举到的第一个c的因子一定不是合数,是质数。
题意提供的c是两个质数乘积,所以另外一个也是质数。
ij=c
枚举i只需要枚举到根号c
证明: i>=根号c,j<=根号c,枚举到i就会出来j,枚举到j就会出来对应的i,所以只需要枚举到根号c,就会出来所有情况。以后遇到两个数的乘积等于n枚举因子,ij=n,枚举到根号n就会出来所有情况。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int main()
{
int n;
cin >> n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
cout << n/i <<endl;
break;
}
}
return 0;
}