UVa 10780 Again Prime? No Time.(因子分解)
阿新 • • 發佈:2018-12-22
題意:輸入包含多組資料,輸入的m,n。n!%m^k==0,求最大的這個k。
題解:對n,m進行因子分解,記錄每個質因子出現的次數,m的所有質因子出現的次數中的最小次數就是答案。
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map> #include <set> using namespace std; #define io ios::sync_with_stdio(0),cin.tie(0) #define ms(arr) memset(arr,0,sizeof(arr)) #define inf 0x3f3f3f typedef long long ll; const int mod=1e9+7; const int maxn=3e5+7; int find1(int n,int i)//ans記錄n!中i因子出現的次數 { int ans=0,m; for(int j=2;j<=n;j++) { m=j; while(m%i==0) { m=m/i; ans++; } } return ans; } int main() { int t,m,n,num; cin>>t; for(int i=1;i<=t;i++) { cin>>m>>n; int j=2,cnt=0,ans=999999999; while(m>1) { cnt=0; while(m%j==0)//cnt記錄m中j因子出現的次數 { m=m/j; cnt++; } if(cnt>0) { num=find1(n,j)/cnt;//n!中次數除以m中的次數 ans=min(ans,num); } j++; } cout<<"Case "<<i<<":"<<endl; if(ans>0) cout<<ans<<endl; else cout<<"Impossible to divide"<<endl; } return 0; }