算法提高 质因数
时间限制:1.0s 内存限制:512.0MB
将一个正整数N(1<N<32768)分解质因数。例如,输入90,打印出90=2*3*3*5。
样例输入
66
样例输出
66=2*3*11
先利用素数打表求出32768内的所有素数。然后枚举每个素数进行除法,直到n == 1时循环结束
#include <cstdio>
#include <vector>
#define MAX 32768 + 10
using namespace std;
int table[MAX];
int visit[MAX];
void primeTable() {
int cnt = 0;
for( int i = 2; i <= MAX; i++ ) {
if( visit[i] ) continue;
table[cnt] = i;
cnt++;
for( int j = i * 2; j <= MAX; j = j + i ) {
visit[j] = 1;
}
}
}
int main() {
primeTable();
int n;
int index = 0;
int cnt = 0;
scanf( "%d", &n );
printf( "%d=", n );
bool flag = false;
while( n > 1 ) {
if( ( n % table[index] ) == 0 ) {
if( !flag ) {
printf( "%d", table[index] );
flag = true;
}
else printf( "*%d", table[index] );
n = n / table[index];
}
else {
index++;
}
}
return 0;
}