算法提高 质因数2
时间限制:1.0s 内存限制:256.0MB
将一个正整数N(1<N<32768)分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
输入格式
一行,一个正整数
输出格式
两行,第一行为用空格分开的质因数
第二行为质因数的个数
第二行为质因数的个数
样例输入
66
样例输出
2 3 113
样例输入
90
样例输出
2 3 3 5
4
4
样例输入
37
样例输出
37
1
1
思路分析:先通过筛法得到素数表。然后对输入的n不断除以当前最小的素数,最后除到n == 1结束。
#include <cstdio>
#define MAX 32768 + 10
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 );
while( n > 1 ) {
if( ( n % table[index] ) == 0 ) {
printf( "%d ", table[index] );
cnt++;
n = n / table[index];
}
else {
index++;
}
}
printf( "\n%d", cnt );
return 0;
}