考虑质因数分解
先将m1,质因数分解后再根据数学定理将所有质数的质数全乘m2
然后将输入的数据相同处理,再判断
顺便说一下判断规矩
1肯定不行
如果分解后有没有m1质因数分解中的因数,对答案不影响
但是如果没有m1中的质因数,那么这个数肯定不行
如果都有的话
就将问题转化为求最大的商(上取整)
#include#include #include using namespace std;int prime[500000],num[500000],tail;int main(){ int n; scanf("%d",&n); int m1,m2; scanf("%d%d",&m1,&m2); if(m1==1) { printf("0"); return 0; } for(int i=2;m1!=1;i++) { if(m1%i) continue; prime[++tail]=i; while(m1%i==0) { num[tail]+=m2; m1/=i; } } int in; int ans=0x7fffffff; bool flag=false; for(int i=1;i<=n;i++) { int now_a=-0x7fffffff; flag=true; scanf("%d",&in); if(in==1) continue; for(int j=1;j<=tail;j++) { if(in%prime[j]) { flag=false; break; } int pass=0; while(in%prime[j]==0) { in/=prime[j]; pass++; } int ha=num[j]/pass; if(num[j]%pass) ha+=1; now_a=max(now_a,ha); continue; } if(!flag) continue; ans=min(ans,now_a); } if(ans!=0x7fffffff) printf("%d",ans); else printf("-1"); return 0;}/*19970 99998*/