1. 程式人生 > >細胞分裂(NOIP2009普及組)

細胞分裂(NOIP2009普及組)

傳送門 素數分解,簡單數論 但是要細心 程式碼如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m1,m2;
int ans,t,num;
int maxu;
int prime[30001];
void div(){
	memset(prime,0,sizeof(prime));
	for(int i=2;i<=m1;i++){
		while(m1%i==0){
			prime[i]++;
			m1/=i;
			maxu=i;
		}
prime[i]*=m2; } } int main(){ scanf("%d%d%d",&n,&m1,&m2); if(m1==1){ printf("0"); return 0; } div(); ans=2147483647; for(int i=0;i<n;i++){ scanf("%d",&num); t=-1; for(int i=2;i<=maxu;i++){ if(prime[i]>0){ int cur=0; while(num%i==0){ cur++
; num/=i; } if(cur==0){ t=-1; break; } t=max(t,prime[i]%cur==0?prime[i]/cur:prime[i]/cur+1); } } if(t!=-1){ ans=min(ans,t); } } printf("%d",ans<2147483647?ans:-1); return 0; }