一、只求出一个数的质因子
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 1e6 + 1;
const int mod = 1e9 + 7;
int read() {
int x(0); bool f(0); char c(getchar());
while(c < '0'||c > '9') {f^=c=='-'; c=getchar();}
while(c >= '0'&&c <= '9') {x = (x<<3) + (x<<1) + (c^48); c=getchar();}
return f ? (~x) + 1 : x;
}
void wt(int x) {
if(x<0) {putchar('-');x = -x;}
if(x) {wt(x / 10); putchar(x % 10 + '0');}
}
int a[M], num, n;
int main() {
n = read();
for(int i = 2; i * i <= n; ++ i) {
if(n % i == 0) {
a[ ++ num] = i;
while(n % i == 0) n /= i;
}
}
if( n > 1) a[ ++ num] = n;
for(int i = 1; i <= num; ++ i) cout<<a[i]<<" ";
return 0;
}
二、求出1~n的所有数的质因子
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int M = 1e6 + 1;
const ll mod = 1e9 + 7;
ll read() {
ll x(0);char c(getchar());
while(c < '0'||c > '9') c=getchar();
while(c >= '0'&&c <= '9') {x = (x<<3) + (x<<1) + (c^48); c=getchar();}
return x;
}
void wt(ll x) {
if(x) {wt(x / 10); putchar(x % 10 + '0');}
}
int vis[M], num, n;
vector<int>a[M];
void intt() {
for(int i = 2; i <= 10000; ++ i) {
if(vis[i] == 0) {
a[i].push_back(i);
for(int j = i + i; j <= 100000; j += i) {
vis[j] = 1;
a[j].push_back(i);
}
}
}
}
int main() {
intt();
for(int i = 1; i <= 100; ++ i) {
for(int j = 0; j < a[i].size(); ++ j) {
cout<<a[i][j]<<" ";
}
puts("");
}
return 0;
}