• P1069 细胞*


    Aimee

    很简单的一个东西

    除了我吧%写成了/之后

    思路:如果如此,那么(m1^{m2})中的每一个质因数一定比s中在最后一天的时候的指数大

    就用这个做

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #define int long long
    using namespace std; 
    int n;
    int mz,my;
    int s[54000];
    int su[54001];
    int p;
    int vis[54001];
    int prime[54001];
    int pr[54001];
    int num[54001];
    int pp;
    int x; 
    void div(){
    	for(int i=2;i<=45000;++i){
    		if(!vis[i]){
    			prime[++p]=i;
    			for(int j=i+i;j<=45000;j+=i){
    				vis[j]=1;
    			}
    		}
    	} 
    	for(int i=1;i<=p;++i){
    		vis[i]=0;
    		while(mz%prime[i]==0){
    			if(vis[i]==0){
    				vis[i]=1;
    				pr[++pp]=prime[i];
    			}
    			num[pp]++;
    			mz/=prime[i];
    		}
    	}
    }
    int ans;
    int Ai;
    int res;
    bool deal(int now){
    	int numm;
    	res=-1;
    	for(int i=1;i<=pp;++i){
    		if(now<pr[i])
    		return 0; 
    		numm=0;
    		if(now%pr[i]==0){
    			while(now%pr[i]==0){
    				numm++;
    				now/=pr[i];
    			}
    			if(numm>=num[i]){
    				res=max((long long)1,res);
    			}
    			if(num[i]*my%numm==0)
    			res=max(res,num[i]*my/numm);
    			else
    			res=max(res,num[i]*my/numm+1);
    		}else{
    			return 0;
    		}
    	}
    	return 1;
    }
    signed main(){
    	scanf("%lld",&n);
    	scanf("%lld%lld",&mz,&my);
    	ans=20000000000000;
    	if(mz==1){
    		cout<<0<<endl;
    		return 0;
    	}
    	div();
    	for(int i=1;i<=n;++i){
    		scanf("%lld",&x); 
    		if(deal(x)){
    			ans=min(ans,res);
    		}
    	}
    	if(ans==20000000000000){
    		cout<<-1;
    	}else{
    		cout<<ans<<endl;
    	}
    	return 0;
    } 
    
  • 相关阅读:
    java 文件下载遇到的数个坑
    table标签 在谷歌和ie浏览器下不同的表现效果
    Java Day 19
    Java Day 18
    Java Day 17
    Java Day 16
    Java Day 15
    Java Day 14
    Java Day 13
    Java Day 12
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13928477.html
Copyright © 2020-2023  润新知