[NOIP 2012 普及组] 质因数分解 · 教师题解

[NOIP 2012 普及组] 质因数分解

知识点

质因数分解、试除法、整数运算

解题思路

从2开始枚举因子i,第一次能整除n时,输出n/i。题目保证n是两个不同质数的乘积。

正确性说明

由于只有两个质因子,较小质因子一定不超过sqrt(n),也一定是从2开始找到的第一个非平凡因子;除法得到另一个、也就是较大的质因子。

易错点

本题依赖两个不同质数乘积的保证;不是输出最小因子;用i*i<=n判断时使用long long。

复杂度

时间O(sqrt(n)),空间O(1)。

参考代码(GNU C++17)

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n;cin>>n;
    for(long long i=2;i*i<=n;++i) if(n%i==0){cout<<n/i<<'\n';return 0;}
}
返回题目