【数论】质因数分解(算术基本定理) (洛谷1075)
原题链接:https://www.luogu.com.cn/problem/P1075

题解:这道题数据很大,预处理质数明显不行,故我们需要进行质因数分解(若其最大质因数是其本身)。首先我们要明确一个概念任何数都是质因数组成,如4由2组成,8由2组成,9由3组成等等。。。。
故这个数若不能被质因数2整,那么必不能被4,8等2的倍数整数,即我们可以通过从头到尾的遍历找到最小整除此数的质因数,即可得出结果
本题需要一些优化,质因数除了2一定是奇数
#include <iostream> using namespace std; int main() { int n; while(cin >> n) { int i = 2; //质数首先要是奇数 while(n % i != 0){ if(i%2) //奇数+2为奇数 i+= 2; else //偶数+1为奇数 i++; } cout << n/i << endl; } return 0; }
由此题可以引申出质因数分解:
所有数都由质数组成,故我们可以写出分解某个数质因数的代码
#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; while(cin >> n) { vector<int> prim; int i = 2; while(n != 1) { if(n % i == 0) { if(find(prim.begin(),prim.end(),i) == prim.end()) prim.push_back(i); n /= i; } i++; } for_each(prim.begin(),prim.end(),[](const int &num){cout << num << " ";}); cout << endl; } return 0; }

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号