淮师大OJ 质因数分解

质因数分解
描述

已知正整数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枚举因子,i
j=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;
}

猜你喜欢

转载自blog.csdn.net/w1304636468/article/details/89880176