题解 | #明明的随机数#
质数因子
http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
正整数中质数有无穷多个。某个数的质因数是有限的,而且除了最大的质因数,其他质因数的大小不会超过该数开方。最坏的情况就是总共有两个质因数,每个质因数都是最大质因数,那么该质因数就达到了上限:原数的开方。所以解题思路为遍历2到该数开方的数,将原数依次相除,每个数都除到有余数为止;那么其中非质因数的数相当于不会遍历到。直到最后剩下一个最大质因数或者1。
#include<bits/stdc++.h> using namespace std; int main(){ unsigned int n; cin >> n; for (int i = 2; i <= sqrt(n); ++i){ while(n % i == 0){ cout << i << ' '; n = n / i; } } if(n != 1) cout << n; return 0; }