题解 P1075 【质因数分解】

· · 题解

第一次发题解非常激动(求通过)

由于不知道质因数分解唯一性定理,所以我并没有采用它(所以本蒟蒻代码很长)

Ps:科普一下质因数分解唯一性定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积(摘自百度百科)

思路:我们可以先自定义一个函数prime判断质数,再在主函数中枚举n的因子,当n的两个因子均为质数时即分解质因数成功(这里有个小技巧:当初次找到一组质数对时,这两个质数即为最小因子和最大因子)(实际上由质因数分解唯一性定理可知,只有一组质数对,笑哭.jpg)

话不多说,上代码

#include<iostream>
#include<cmath>//使用sqrt需调用库 
#include<algorithm>//使用max需调用库 
using namespace std;
bool prime(int i)//定义判断质数函数 
{
    for(int j=2;j<=sqrt(i);j++)//求一个数的质数不需要枚举到这个数,只需枚举到这个数的平方根即可 
    if(i%j==0) return false;//如果是不是质数返回false
    return true;//如果是质数返回true 
}
int main()//开始主函数 
{
    int n;
    cin>>n;
    for(int i=2;i<=sqrt(n);i++)//查找n的因数 
    {
        if(n%i==0&&prime(i)&&n%(n/i)==0&&prime(n/i))//i是n的一个因数,n/i是与之对应的n的另一个因数,只有当两数均为质数时条件成立,我们找到了需要的质数对 
        {
            cout<<max(i,n/i)<<endl;//比较质数对,输出较大的那个质数 
            return 0;
         } 
    }
    return 0;//养成良好的代码书写风格 
}

第一次发题解,如果大家看懂了请点个赞,谢谢!