试除法分解质因数
- 证明一下循环里面的 i 一定是一个质数:假如 i 是一个合数,那么它一定可以分解成多个质因子相乘的形式,这多个质因子同时也是 a 的质因子且比 i 要小,而比 i 小的数在之前的循环过程中一定是被条件除完了的,所以 i 不可能是合数,只可能是质数
- n中最多只含有一个大于sqrt(n)的质因子。证明通过反证法:如果有两个大于sqrt(n)的质因子,那么相乘会大于n,矛盾。证毕
贴上代码:
#includeusing namespace std; int main() { int n; cin >> n; while(n--) { int a; cin >> a; for(int i = 2; i <= a / i; i++) { if(a % i == 0) { int cnt = 0; while(a % i == 0) { a /= i; cnt++; } cout << i << ' ' << cnt << endl; } } if(a > 1) cout << a << ' ' << 1 << endl; cout << endl; } return 0; }