2 条题解
-
0
#include <bits/stdc++.h> using namespace std; const int inf = 0x3f3f3f3f; int len, a[1100], b[1100], m1, m2; int check(int s) { if (len == 0) return 0; int ret = 0; for (int i = 1; i <= len; i++) { if (s % a[i] != 0) return inf; int t = 0; while (s % a[i] == 0) s /= a[i], t++; ret = max(ret, (b[i] * m2 + t - 1) / t); } return ret; } int main() { int n; scanf("%d", &n); scanf("%d%d", &m1, &m2); len = 0; for (int i = 2; i * i <= m1; i++) if (m1 % i == 0) { a[++len] = i; while (m1 % i == 0) { b[len]++; m1 /= i; } } if (m1 > 1) { a[++len] = m1; b[len] = 1; } int ans = inf; for (int i = 1; i <= n; i++) { int s; scanf("%d", &s); int t = check(s); ans = min(ans, t); } if (ans == inf) printf("-1\n"); else printf("%d\n", ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int inf=0x3f3f3f3f; int len,a[1100],b[1100],m1,m2; int check(int s) { if(len==0) return 0; int ret=0; for(int i=1;i<=len;i++) { if(s%a[i]!=0) return inf; int t=0;while(s%a[i]==0) s/=a[i],t++; ret=max(ret,(b[i]*m2+t-1)/t); } return ret; } int main() { int n;scanf("%d",&n); scanf("%d%d",&m1,&m2); len=0; for(int i=2;i*i<=m1;i++)if(m1%i==0) { a[++len]=i; while(m1%i==0) { b[len]++; m1/=i; } } if(m1>1){a[++len]=m1;b[len]=1;} int ans=inf; for(int i=1;i<=n;i++) { int s;scanf("%d",&s); int t=check(s); ans=min(ans,t); } if(ans==inf)printf("-1\n");else printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 657
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 27
- 已通过
- 13
- 上传者