求质因子

一、只求出一个数的质因子

#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;
}
posted @ 2022-02-12 06:37  双枫  阅读(122)  评论(0编辑  收藏  举报