数论一丢丢模板
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e5+7; const ll mod=1e9+7; bool a[maxn];///存放对于i是否是素数的判断 ///试除法 bool priem(ll n) { if(n==1) return false; for(ll i=2;i*i<=n;i++) { if(n%i==0) return false; } return true; } ///唉式筛 void ai() { a[1]=false; for(int i=2;i<maxn;i++) a[i]=true; for(int i=2;i<maxn;i++) { if(a[i]) { for(int j=i*2;j<maxn;j+=i)///优化的话就把出书画改成j=i*i a[j]=false; } } } ///线性筛(欧拉筛) void oula(ll N) { bool number[N+1]; ll prime[N+1]; ll i,j,count=0; memset(number,true,sizeof(number)); for(i=2;i<=N;i++) { if(number[i]) prime[count++]=i; for(j=0;j<count&&prime[j]*i<=N;j++) { number[prime[j]*i]=false; if(i%prime[j]==0)//精华就在于此:它保证每个合数只会被它的最小质因数筛去,因此每个数只会被标记一次,所以时间复杂度是O(n) break; } } for(i=2;i<N+1;i++) if(number[i]==true) printf("%d ",i); } ///欧拉函数 ll phi(ll n) { ll i,rea=n; for(i=2;i*i<=n;i++) { if(n%i==0) { rea=rea-rea/i; while(n%i==0) n/=i; } } if(n>1) rea=rea-rea/n; return rea; } ///快速幂 ll quickpow(ll base,ll mi) { ll ans=1; while(mi) { if(mi&1) ans=ans*base%mod; base=base*base%mod; mi>>=1; } return ans; } ///唯一分解 void fen(ll n) { int a[1000][2]; int w=0; ll t=n; for(int i=2;i<maxn&&n;i++) { if(priem(i)) { if(n%i==0) { a[w][0]=i; int m=0; while(n%i==0) { m++; n/=i; } a[w][1]=m; w++; } } } cout<<t<<"="; for(int i=0;i<w;i++) cout<<a[i][0]<<"^"<<a[i][1]<<"*"; cout<<endl; } int main() { ll y,b; return 0; }