#include <bits/stdc++.h>
using namespace std;
const int P=1e9+7;
int mod(int a){//求模
return ((a%P)+P)%P;
}
int add(int a,int b){//加法
a=mod(a);
b=mod(b);
return (a+b)%P;
}
int mul(int a,int b){//乘法
a=mod(a);
b=mod(b);
return (a*b)%P;
}
int smul(int a,int b){//慢速乘
a=mod(a);
b=mod(b);
int res=0;
while(b){
if(b%2){
res=add(res,a);
}
b/=2;
a=add(a,a);
}
return res;
}
int fpm(int a,int n){//快速幂
a=mod(a);
int res=1;
while(n){
if(n%2){
res=mul(res,a);
}
n/=2;
a=mul(a,a);
}
return res;
}
int m; //当前质数的个数
int v[1000010]; //v[i]的最小质因子
int p[1000010]; //p[i]表示第i个质数
//筛的过程就是在找最小质因子的过程
void prime(int n)//质数筛
{
for(int i=2; i<=n; i++)
{
if(v[i] == 0) //如果这个数字没有被筛走, 则它本身就是一个质数
{
v[i] = i; //v[i]的最小质因子就是它本身
p[++m] = i; //同时, 质因子的数量+1
}
for(int j=1; j<=m && i*p[j]<=n; j++) //质数在p中, 从第1个到第m个
{
v[i*p[j]] = p[j];
if(i % p[j] == 0) //i%p[j] == 0 2 % 2 == 0
{
//当i也存在最小质因子p[j]的时候, 下一个p[j]一定不是i*p[j]的最小质因子
break;
}
}
}
}
unordered_map<int,int> um;
//key value
//底数,指数
int pfactor(int n){//质因数分解
for(int i=2;i*i<=n;i++){
while(n%i==0){
um[i]++;
n/=i;
}
}
if(n>1){
um[n]++;
}
}
int main(){
pfactor(114514);
for(auto e:um){
cout<<e.first<<" "<<e.second<<endl;
}
return 0;
}
初级数论
发布时间 2023-10-31 00:03:41作者: zhuwen