用唯一分解定理求m/n,保证m能够被n整除;
这其中用到了素数筛以及快速幂
#include<bits/stdc++.h> using namespace std; const int maxn=1e4+5; bool vis[maxn]; int prime[maxn],cnt=0,e[maxn]; void getprime(){ for(int i=2;i<maxn;++i){ if(!vis[i])prime[++cnt]=i; for(int j=i*2;j<maxn;j+=i) vis[j]=1; } } void solve(int x,int d){ for(int i=1;i<=cnt;++i){ while(x>1&&x%prime[i]==0){ x=x/prime[i]; e[i]+=d; } if(x<=1)break; } } int qpow(int x,int cnt){ int ans=1; while(cnt){ if(cnt&1)ans*=x; x=x*x; cnt>>=1; } return ans; } int main() { getprime(); int m=10000,n=10; solve(m,1); solve(n,-1); int ans=1; for(int i=1;i<=cnt;++i){ ans*=qpow(prime[i],e[i]); } printf("%d\n",ans); return 0; }
原文地址:https://www.cnblogs.com/lengsong/p/11290619.html
时间: 2024-10-25 01:42:11