14 条题解
- 
  1aph。 (chenqianrong) LV 10 @ 2021-08-21 11:14:58 #include<bits/stdc++.h> using namespace std; int n,m1,m2,minx,gcdd,m,s,q,t,flag,tot,ans,tots,totq; int S[10001]; int read() { char ch=getchar(); int a=0,x=1; while(ch<'0' || ch>'9') { if(ch=='-') x=-x; ch=getchar(); } while(ch>='0' && ch<='9') { a=(a<<3)+(a<<1)+(ch-'0'); ch=getchar(); } return a*x; } int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } int main() { n=read(); m1=read(); m2=read(); minx=1e9; if(m1==1) { cout<<0; return 0; } for(int i=1;i<=n;i++) S[i]=read(); for(int i=1; i<=n; i++) { tot=0; m=m1; s=S[i]; flag=1; t=0; while(m!=1) { gcdd=gcd(m,s); if(gcdd==1){ flag=0; break; } m/=gcdd; q=s/gcdd; s=gcdd; t++; } if(flag) { int gc=gcd(q,s); if(gc!=1&&gc!=s) { totq=0;tots=0; while(q%gc==0) { totq++; q/=gc; } while(s%gc==0) { tots++; s/=gc; } if((t*m2*tots+totq*(t-1)*m2)%(tots+totq)==0) ans=(t*m2*tots+totq*(t-1)*m2)/(tots+totq); else ans=(t*m2*tots+totq*(t-1)*m2)/(tots+totq)+1; minx=min(minx,ans); } else { while(q%s==0) { tot++; q/=s; } if((t*m2+tot*(t-1)*m2)%(tot+1)==0) ans=(t*m2+tot*(t-1)*m2)/(tot+1); else ans=(t*m2+tot*(t-1)*m2)/(tot+1)+1; minx=min(minx,ans); } } } if(minx==1e9) cout<<-1; else cout<<minx; return 0; }
- 
  1@ 2017-07-26 11:12:32之前没有管1个试管的特判,第一个点错了无数次; 
 可能是最近学数论,将题目看做求解: s[i]^x ≡0(mod m1^m2) 简直太傻逼了;
 提示:本体就是一个唯一分解定理的应用:a|b≡b包括a中所有质因数,且数目大于等于b所有质因数
 #include<iostream>
 #include<cstring>
 #include<cstdio>
 #include<cmath>
 #include<climits>
 typedef long long LL;
 const LL inf=LLONG_MAX;
 inline const void read(LL &a)
 {
 a=0;
 char c=getchar();
 while(c<'0'||c>'9')c=getchar();
 while(c>='0'&&c<='9')
 {
 a=a*10+c-'0';
 c=getchar();
 }
 }
 bool prime[30001];
 LL n,s,ans=inf;//病毒数 分裂数 最优答案
 LL m1,m2;//试管数m1^m2
 void solve_prime()
 {
 for(LL i=2;i<=30000;i++)
 if(prime[i])
 for(LL j=2;j*i<=30000;j++)prime[i*j]=false;
 }
 LL de[30001],num[30001];
 LL des[30001];
 void devide_m1()
 {
 memset(de,0,sizeof(de));
 memset(num,0,sizeof(num));
 LL a=m1;
 for(LL i=2;i<=m1;i++)
 {
 if(a==1)break;
 if(prime[i])
 while(!(a%i))
 {
 de[0]++;
 de[de[0]]=i;
 num[i]++;
 a/=i;
 }
 }
 for(LL i=1;i<=m1;i++)num[i]*=m2;
 }
 inline const void devide(LL c)
 {
 LL a=c;
 memset(des,0,sizeof(des));
 for(LL i=2;i<=m1;i++)
 {
 if(prime[i])
 while(!(a%i))
 {
 des[i]++;
 a/=i;
 if(a==1)return ;
 }
 }
 }
 inline const LL big(LL a,LL b)
 {
 if(a>b)return a;
 else return b;
 }
 inline const LL small(LL a,LL b)
 {
 if(a>b)return b;
 else return a;
 }
 int main()
 {
 memset(prime,true,sizeof(prime));
 prime[0]=prime[1]=false;
 solve_prime();
 read(n);read(m1);read(m2);
 devide_m1();
 if(m1==1||m2==0)//特判1
 {
 printf("%d",0);
 return 0;
 }
 for(LL k=1;k<=n;k++)//求解: s^x ≡0(mod m1^m2)
 {
 LL ansk=-inf;
 read(s);
 if(s==1)continue;
 devide(s);
 for(LL i=1;i<=de[0];i++)
 {
 if(des[de[i]])
 ansk=big(LL(ceil(double(num[de[i]])/double(des[de[i]]))),ansk);
 else {ansk=inf;break;}
 }
 ans=small(ansk,ans);
 }
 if(ans==inf)printf("%d",-1);
 else printf("%lld",ans);
 return 0;
 }
- 
  0@ 2016-12-30 22:24:42Is this problem difficult?In fact just prime factors decomposition and extracting.Enumeration of the corresponding prime factors, properties: the basic factors of power remains the same.So we can get the answer.Only six lines of code and deal with details determine prime factors. 
- 
  0@ 2016-11-17 12:13:33评测结果 编译成功 测试数据 #0: Accepted, time = 0 ms, mem = 860 KiB, score = 10 测试数据 #1: Accepted, time = 0 ms, mem = 860 KiB, score = 10 测试数据 #2: Accepted, time = 0 ms, mem = 860 KiB, score = 10 测试数据 #3: Accepted, time = 0 ms, mem = 860 KiB, score = 10 测试数据 #4: Accepted, time = 0 ms, mem = 860 KiB, score = 10 测试数据 #5: Accepted, time = 0 ms, mem = 860 KiB, score = 10 测试数据 #6: Accepted, time = 0 ms, mem = 860 KiB, score = 10 测试数据 #7: Accepted, time = 31 ms, mem = 864 KiB, score = 10 测试数据 #8: Accepted, time = 31 ms, mem = 860 KiB, score = 10 测试数据 #9: Accepted, time = 46 ms, mem = 864 KiB, score = 10 Accepted, time = 154 ms, mem = 864 KiB, score = 100 代码 #include <algorithm> #include <cstring> #include <cstdio> #include <cmath> using namespace std; const int INF = 999999999; int n,m1,m2,p[30001],num1[30001],num2[30001]; int main() { //freopen("cell.in","r",stdin); //freopen("cell.out","w",stdout); scanf("%d%d%d",&n,&m1,&m2); p[0] = 0; for (int i = 2;i*i <= m1;i++) if (!(m1%i)) { p[++p[0]] = i; while (!(m1%i)) { m1 /= i; num1[p[0]]++; } } if (m1 != 1) { p[++p[0]] = m1; num1[p[0]] = 1; } for (int i = 1;i <= p[0];i++) num1[i] *= m2; int Min = INF; for (int i = 1,x;i <= n;i++) { memset(num2,0,sizeof(num2)); scanf("%d",&x); bool flag = false; for (int j = 1;j <= p[0];j++) if (x%p[j]) { flag = true; break; } if (flag) continue; for (int j = 1;j <= p[0];j++) while (!(x%p[j])) { num2[j]++; x /= p[j]; } int Max = 0; for (int j = 1;j <= p[0];j++) if (num1[j] > num2[j]) { Max = max(Max,(int)(ceil((double)num1[j]/num2[j])+1e-6)); if (Max > Min) break; } Min = min(Min,Max); } printf("%d",Min == INF ? -1 : Min); return 0; }
- 
  0@ 2016-11-16 22:22:28编译成功 Free Pascal Compiler version 3.0.0 [2015/11/16] for i386 
 Copyright (c) 1993-2015 by Florian Klaempfl and others
 Target OS: Win32 for i386
 Compiling foo.pas
 Linking foo.exe
 56 lines compiled, 0.0 sec, 28272 bytes code, 1268 bytes data
 测试数据 #0: Accepted, time = 0 ms, mem = 928 KiB, score = 10
 测试数据 #1: Accepted, time = 0 ms, mem = 928 KiB, score = 10
 测试数据 #2: Accepted, time = 0 ms, mem = 928 KiB, score = 10
 测试数据 #3: Accepted, time = 0 ms, mem = 932 KiB, score = 10
 测试数据 #4: Accepted, time = 0 ms, mem = 932 KiB, score = 10
 测试数据 #5: Accepted, time = 0 ms, mem = 928 KiB, score = 10
 测试数据 #6: Accepted, time = 0 ms, mem = 932 KiB, score = 10
 测试数据 #7: Accepted, time = 0 ms, mem = 928 KiB, score = 10
 测试数据 #8: Accepted, time = 0 ms, mem = 932 KiB, score = 10
 测试数据 #9: Accepted, time = 15 ms, mem = 928 KiB, score = 10
 Accepted, time = 15 ms, mem = 932 KiB, score = 100
 ```
 var s,a,b:array[0..10000]of longint;
 min,i,j,k,m1,m2,n,t:longint; f:boolean;function doit(n:longint):longint; 
 var max,m,k,i:longint;
 begin
 max:=-maxlongint;
 for i:=1 to j do
 begin
 m:=0;
 while (n mod a[i]=0) do
 begin inc(m);n:=n div a[i]; end;
 k:=b[i]div m;
 if b[i]mod m<>0 then k:=k+1;
 if k>max then max:=k;
 end;
 doit:=max;
 end;procedure prime_main(x:longint); 
 var i:longint;
 begin
 i:=2;j:=0;
 while (x<>1) do begin
 if x mod i=0 then
 begin
 inc(j);a[j]:=i;
 while x mod i=0 do
 begin
 x:=x div i;
 inc(b[j]);
 end;
 b[j]:=b[j]*m2;
 end;
 inc(i);end;
 end;begin 
 readln(n);
 readln(m1,m2);
 for i:=1 to n do read(s[i]);
 if (m1=1)or(m2=0) then begin write('0');halt end;
 prime_main(m1);
 min:=maxlongint;
 // for i:=1 to j do for k:=1 to b[i] do writeln(a[i],' ');halt;
 for i:=1 to n do
 begin
 f:=true;
 for k:=1 to j do
 if (s[i] mod a[k]<>0) then begin f:=false;break;end;
 if f then t:=doit(s[i]);
 if f and (min>t) then min:=t;
 end;if min<>maxlongint then writeln(min) else writeln('-1'); 
 end.```
- 
  0@ 2015-09-18 17:00:20给定m1^m2的大数和n个数s[] 
 求s_i^x mod m1^m2=0最小的x由于m1<=30000,m2<=10000,根本无法直接计算,所以需要通过数学分析得出答案。 
 如果一个数能够整除另一个数,那么这个数因数分解后一定有另一个数所有的元素,且每个元素个数均大于等于另一个数相同元素的个数。 
 因此我们可以先对m1进行因数分解,并将对应元素的个数乘以m2。
 之后读入每个数,判断该数因数分解后是否有m1中所有的元素。
 如果有的话,则计算该细胞最大的分裂次数(即对应m1种元素个数/si中元素个数后向上取整)。
 枚举分解每一个给定的数,最后更新答案即可。
 因数分解中1比较特殊,要单独判断一下。
 var
 d,di,zi,z:array[0..10000] of longint;
 s,x,m,top,j,i,ans,n,p,q:longint;
 procedure fenjie(n:longint);
 var i:longint; //分解n 底数在d 指数在z 个数为top
 begin
 fillchar(d,sizeof(d),false);
 fillchar(z,sizeof(z),0);
 top:=0;
 i:=2;
 while n<>1 do
 if n mod i=0 then
 begin
 if (i=d[top]) then inc(z[top]) else
 begin
 inc(top);
 d[top]:=i;
 inc(z[top]);
 end;
 n:=n div i;
 end else
 begin
 inc(i);
 if i>trunc(sqrt(n)) then break;
 end;
 if n<>1 then
 begin inc(top); d[top]:=n; inc(z[top]); end;
 end;
 function pan:boolean; //判断次数分解后是否有m1的所有元素
 var o,i,j:longint;
 begin
 s:=0;
 j:=1;
 for i:=1 to m do
 begin
 while (di[i]<>d[j]) do
 begin
 inc(j);
 if j>top+1 then exit(false);
 end;
 if (zi[i]/z[j])-(zi[i] div z[j])>0 //收尾
 then o:=(zi[i] div z[j])+1 else o:=zi[i] div z[j];
 if o>s then s:=o; //要满足最大的
 end;
 exit(true);
 end;
 begin
 read(n);
 read(p,q);
 if p=1 then begin writeln(0); halt; end; //特判1
 fenjie(p);
 m:=top; di:=d; zi:=z;
 for i:=1 to top do zi[i]:=zi[i]*q;
 ans:=123456789;
 for j:=1 to n do
 begin
 read(x);
 fenjie(x);
 if (pan=true) and (s<ans) then ans:=s; //更新答案
 end;
 if ans=123456789 then writeln(-1) else writeln(ans);
 end.
- 
  0@ 2015-08-23 12:34:19非常简单的一题,就是分解质因数,记得判断试管数为1 您向题目P1814 - 细胞分裂递交的代码已通过评测! 
 现将代码发送给您保存:
 #include<iostream>
 #include<cstdio>
 #include<cstring>
 #include<cmath>
 #include<cstdlib>
 #include<algorithm>
 #include<ctime>
 #include<queue>
 #include<stack>using namespace std; int pr_[25],L; 
 int t[25];
 int txg[25];int main(){ 
 //freopen("cell.in","r",stdin);
 //freopen("cell.ans","w",stdout);
 int N,m1,m2,tot,i,j,s,ans=0x7fffffff,ansf;
 cin>>N>>m1>>m2;
 for(i=2;i*i<=m1;i++){
 if(m1%i==0)pr_[++L]=i;
 while(m1%i==0){t[L]+=m2;m1/=i;}
 }
 if(m1-1){pr_[++L]=m1;t[L]=m2;}
 for(j=1;j<=N;j++){
 scanf("%d",&tot);s=0;ansf=-1;
 for(i=1;i<=L;i++){
 if(tot%pr_[i]!=0) goto next;
 while(tot%pr_[i]==0){++s;tot/=pr_[i];}
 ansf=max(ansf,(t[i]-1)/s+1);
 }
 ans=min(ans,L==0?0:(ansf==-1?ans:ansf));
 next:;
 }
 cout<<(ans==0x7fffffff?-1:ans);
 return 0;
 }
 如果您不需要此项功能,请到https://vijos.org/home/settings关闭,谢谢。
 这封邮件由Vijos自动发送,请勿直接回复。
- 
  0@ 2014-10-28 18:59:42注意特判试管数为1的情况 
- 
  0@ 2014-08-09 12:10:340ms.... 
 Code:
 编译成功Free Pascal Compiler version 2.6.2 [2013/02/12] for i386 
 Copyright (c) 1993-2012 by Florian Klaempfl and others
 Target OS: Win32 for i386
 Compiling foo.pas
 foo.pas(4,5) Note: Local variable "g" not used
 Linking foo.exe
 63 lines compiled, 0.3 sec , 28528 bytes code, 1628 bytes data
 1 note(s) issued
 测试数据 #0: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #1: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #2: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #3: Accepted, time = 0 ms, mem = 848 KiB, score = 10
 测试数据 #4: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #5: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #6: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #7: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #8: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 测试数据 #9: Accepted, time = 0 ms, mem = 844 KiB, score = 10
 Accepted, time = 0 ms, mem = 848 KiB, score = 100
 代码
 type
 arr=array[1..30000,1..2] of longint;
 var
 ans,g,i,k,n,m1,m2,total:longint;
 a:arr;
 procedure factorization(k:longint;var a:arr;var link:longint);
 var
 i:longint;
 begin
 i:=1;
 link:=0;
 repeat
 inc(i);
 if k mod i=0 then
 begin
 inc(link);
 a[link,1]:=i;
 a[link,2]:=0;
 while k mod i=0 do
 begin
 inc(a[link,2]);
 k:=k div i;
 end;
 end;
 until k=1;
 end;
 procedure main;
 var
 i,z,max:longint;
 begin
 max:=-1;
 read(k);
 for i:=1 to total do
 begin
 if k mod a[i,1]<>0 then exit;
 z:=0;
 while k mod a[i,1]=0 do
 begin
 inc(z);
 k:=k div a[i,1];
 end;
 if (a[i,2]+z-1) div z>max then max:=(a[i,2]+z-1) div z;
 end;
 if max<ans then ans:=max;
 end;
 begin
 ans:=maxlongint;
 readln(n);
 readln(m1,m2);
 if m1=1 then
 begin
 writeln(0);
 halt;
 end;
 factorization(m1,a,total);
 for i:=1 to total do
 a[i,2]:=a[i,2]*m2;
 for i:=1 to n do
 main;
 if ans=maxlongint then writeln(-1)
 else writeln(ans);
 readln;
 readln;
 end.
- 
  0@ 2014-04-20 12:47:09AC370题留恋! 
- 
  0@ 2014-01-01 21:38:10### 
 var n,m1,m2,i,j,l,ans,nowans,temp,total:longint;
 x,y,s:array[0..30000]of longint;
 b:boolean;
 procedure FenJieZhiYinShu(n:longint);
 begin
 i:=1;j:=0;
 while n<>1 do
 begin
 i:=i+1;
 if n mod i=0 then
 begin
 j:=j+1;
 x[j]:=i;
 y[j]:=0;
 while n mod i=0 do
 begin
 n:=n div i;
 y[j]:=y[j]+1;
 end;
 end;
 end;
 l:=j;
 end;
 begin
 readln(n);
 readln(m1,m2);
 for i:=1 to n do read(s[i]);
 if(m1=1)or(m2=0)then
 begin
 writeln(0); exit;
 end;
 FenJieZhiYinShu(m1);
 for i:=1 to l do y[i]:=y[i]*m2;
 ans:=maxlongint;
 for i:=1 to n do
 begin
 b:=true; nowans:=0;
 for j:=1 to l do
 begin
 temp:=s[i];
 total:=0;
 while temp mod x[j]=0 do
 begin
 temp:=temp div x[j];
 total:=total+1;
 end;
 if total=0 then begin b:=false;break;end;
 temp:=y[j]div total;
 if y[j]mod total<>0 then temp:=temp+1;
 if nowans<temp then nowans:=temp;
 end;
 if b=false then continue;
 if nowans<ans then ans:=nowans;
 end;
 if ans<>maxlongint then writeln(ans)else writeln(-1);
 end.
- 
  0@ 2014-01-01 21:36:35###Block Code 
 var c,y:array[0..30001] of longint;
 n,m1,m2,z1,z2,t,res,f:longint;
 Procedure check(k:longint);
 var z1,z2,d,max:longint;
 begin
 max:=-1;
 for z1:=1 to t do
 begin
 d:=0;
 while k mod c[z1]=0 do
 begin
 inc(d);
 k:=k div c[z1];
 end;
 If d=0 then exit;
 z2:=y[z1] div d;
 If z2*d<y[z1] then inc(z2);
 If z2>=res then exit;
 If z2>max then max:=z2;
 end;
 res:=max;
 end;
 begin
 readln(n); readln(m1,m2);
 f:=m1;
 for z1:=2 to m1 do
 for z2:=2 to m1 div z1 do c[z1*z2]:=1;
 z2:=1;
 while z2<m1 do
 begin
 inc(z2);
 If (c[z2]=0)and(m1 mod z2=0) then
 begin
 inc(t); c[t]:=z2;
 while m1 mod z2=0 do
 begin
 inc(y[t]);
 m1:=m1 div z2;
 end;
 end;
 end;
 res:=maxlongint;
 for z1:=1 to t do y[z1]:=y[z1]*m2;
 for z1:=1 to n do
 begin
 read(z2);
 check(z2);
 end;
 If f=1 then writeln(0) else
 If res=maxlongint then writeln(-1) else
 writeln(res);
 end.
- 
  0@ 2013-11-05 22:09:48评测结果 编译成功 测试数据 #0: Accepted, time = 0 ms, mem = 840 KiB, score = 10 测试数据 #1: Accepted, time = 15 ms, mem = 836 KiB, score = 10 测试数据 #2: Accepted, time = 0 ms, mem = 836 KiB, score = 10 测试数据 #3: Accepted, time = 15 ms, mem = 836 KiB, score = 10 测试数据 #4: Accepted, time = 171 ms, mem = 836 KiB, score = 10 测试数据 #5: Accepted, time = 0 ms, mem = 840 KiB, score = 10 测试数据 #6: Accepted, time = 78 ms, mem = 836 KiB, score = 10 测试数据 #7: Accepted, time = 62 ms, mem = 836 KiB, score = 10 测试数据 #8: Accepted, time = 578 ms, mem = 840 KiB, score = 10 测试数据 #9: Accepted, time = 500 ms, mem = 836 KiB, score = 10 Accepted, time = 1419 ms, mem = 840 KiB, score = 100 
 代码#include <iostream> 
 #include <stdio.h>
 #include <math.h>
 #include <string.h>using namespace std; int N; 
 int m1 , m2 , m3;
 int a[10000 + 10] , b[30000] , c[30000];
 int i , j;
 int tem;
 int getans;
 int maxd , maxe , maxf , tht , tt;int main() 
 {
 while( scanf( "%d" , &N ) != EOF )
 {
 getans = 0;
 maxd = maxe = 0;
 maxf = 1000000000;
 memset( a , 0 , sizeof( a ) );
 memset( b , 0 , sizeof( b ) );
 memset( c , 0 , sizeof( c ) );
 scanf( "%d %d" , &m1 , &m2 );
 m3 = m1;
 //cout << m3 << endl;
 for( i = 0 ; i < N ; i++ )
 scanf( "%d" , &a[i] );
 while( m1 % 2 == 0 )
 {
 //cout << "f\n";
 m1 /= 2;
 b[2]++;
 }
 for( i = 3 ; i <= m1 ; i += 2 )
 {
 while( m1 % i == 0 )
 {
 //cout << "f\n";
 m1 /= i;
 b[i]++;
 }
 if( m1 == 1 )
 break;
 }
 //cout << "f\n";
 m1 = m3;
 /*for( i = 0 ; i <= m1 ; i++ )
 if( b[i] != 0 )
 cout << i << " " << b[i] << endl;*/
 for( i = 0 ; i <= m1 ; i++ )
 {
 b[i] *= m2;
 maxd = i;
 }
 for( i = 0 ; i < N ; i++ )
 {
 memset( c , 0 , sizeof( c ) );
 tht = 0;
 maxe = 0;
 tem = a[i];
 while( tem % 2 == 0 )
 {
 //cout << "f\n";
 tem /= 2;
 c[2]++;
 }
 for( j = 3 ; j <= m1 ; j += 2 )
 {
 while( tem % j == 0 )
 {
 //cout << "f\n";
 tem /= j;
 c[j]++;
 }
 if( tem == 1 )
 break;
 }
 tt = 1;
 for( j = 0 ; j <= maxd ; j++ )
 {
 if( b[j] != 0 && c[j] == 0 )
 {
 tt = 0;
 break;
 }
 if( b[j] != 0 )
 {
 //cout << j << " " << b[j] << " " << c[j] << endl;
 if( b[j] % c[j] == 0 )
 tht = b[j] / c[j];
 else
 tht = ( int )( b[j] / c[j] ) + 1;
 if( tht > maxe )
 maxe = tht;
 }
 }
 //cout << maxe << endl;
 if( maxe < maxf && tt != 0 )
 maxf = maxe;
 if( tt != 0 )
 getans = 1;
 }
 if( !getans )
 cout << "-1\n";
 else
 cout << maxf << endl;
 }
 return 0;
 }
- 
  0@ 2013-10-05 19:41:14var c,y:array[0..30001] of longint; 
 n,m1,m2,z1,z2,t,res,f:longint;Procedure check(k:longint); 
 var z1,z2,d,max:longint;
 begin
 max:=-1;
 for z1:=1 to t do
 begin
 d:=0;
 while k mod c[z1]=0 do
 begin
 inc(d);
 k:=k div c[z1];
 end;
 If d=0 then exit;
 z2:=y[z1] div d;
 If z2*d<y[z1] then inc(z2);
 If z2>=res then exit;
 If z2>max then max:=z2;
 end;
 res:=max;
 end;begin 
 readln(n); readln(m1,m2);
 f:=m1;
 for z1:=2 to m1 do
 for z2:=2 to m1 div z1 do c[z1*z2]:=1;
 z2:=1;
 while z2<m1 do
 begin
 inc(z2);
 If (c[z2]=0)and(m1 mod z2=0) then
 begin
 inc(t); c[t]:=z2;
 while m1 mod z2=0 do
 begin
 inc(y[t]);
 m1:=m1 div z2;
 end;
 end;
 end;
 res:=maxlongint;
 for z1:=1 to t do y[z1]:=y[z1]*m2;
 for z1:=1 to n do
 begin
 read(z2);
 check(z2);
 end;
 If f=1 then writeln(0) else
 If res=maxlongint then writeln(-1) else
 writeln(res);
 end.
- 1
信息
- ID
- 1814
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 1413
- 已通过
- 324
- 通过率
- 23%
- 被复制
- 16
- 上传者