质因数分解
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> #define ll long long #define maxn 1005 using namespace std; int p[maxn],c[maxn],tot; void devide(int n){ tot=0; for(int i=2;i<=sqrt(n);++i){ if(n%i==0){ ++tot; p[tot]=i; c[tot]=0; while(n%i==0){ n/=i; ++c[tot]; } } } if(n>1){ ++tot; p[tot]=n; c[tot]=1; } return; } int main(){ int n; scanf("%d",&n); devide(n); for(int i=1;i<=tot;++i){ printf("%d %d\n",p[i],c[i]); } return 0; }
欧拉筛版质因数分解
先进行欧拉筛 找出每个数的最小质因子
//核心:n只会被最小质因子筛掉 int cnt; //素数的个数 int v[N]; //存每个数的最小质因子 int prime[N]; //存素数 void get_primes(int n){ for(int i = 2;i <= n; ++i){ if(v[i] == 0){ v[i] = i; prime[++cnt] = i; } for(int j = 1 ; j <= cnt;++j){ if(prime[j] > v[i] || i * prime[j] > n) break; v[prime[j] * i] = prime[j]; } } } void divide(int n) { while (v[n]) { printf("%d ", v[n]); // 在前 n /= v[n]; //在后 } }