0
已解决
不知道样例一是什么意思
在线等大佬讲解
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
bool zhishu(int n){
if(n==1) return 0;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
bool yinshu(int n){
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return 1;
}
}
return 0;
}
bool f=0;
int n,m1,m2;
long long m;
int main(){
cin>>n;
cin>>m1>>m2;
long long a[n],time[n];
for(int i=0;i<n;i++){
cin>>a[i];
time[i]=0;
}
m=pow(m1,m2);
while(1){
if(f==1){
break;
}
for(int i=0;i<n;i++){
if(a[i]%m==0){
f=1;
cout<<time[i];
break;
}else{
a[i]*=2;
}
time[i]++;
}
}
return 0;
}
这是鄙人的代码(布吉岛有没有错)
李明昕在2021-09-15 21:20:53追加了内容
前面的两个函数当作没看到就行
0
已采纳
赠送函数:
void Get_prime(int x){
for(int i=2;i<=x;i++){
if(f[i]==0)prime[++num]=i;
for(int j=1;j<=num;j++){
if(i*prime[j]>x)break;
f[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
void Get_mi(int x,int y){
if(x<2)return;
for(int i=1;prime[i]<=x;i++){
while(x%prime[i]==0)mi[i]++,x/=prime[i];
if(x==1)break;
}
for(int i=1;i<=m2;i++)
mi[i]*=y;
}
int cla(int a,int b){
if(a<b)return 0;
int t=a/b;
if(t*b==a)return t;
else return t+1;
}
int main 里:
Get_prime(m1);
Get_mi(m1,m2);
循环(整型 k等于1;k小于等于n;k++)
{
scanf("%d",&S);整型 falg等于0,A等于0;
循环(整型 i等于1;prime[i]小于等于m1;i++)
{
cnt等于0;如果(!prime[i])break;
while(S%prime[i]等于0)cnt++,S/等于prime[i];
如果(mi[i]&&!cnt)
{
falg等于1;break;
}
如果(mi[i]等于0&&cnt等于0)continue;
A等于max(A,cla(mi[i],cnt));
}
如果(falg等于0)ans等于min(ans,A);
}
如果(ans大于等于0x7fffff)pr整型f("-1\n");
else pr整型f("%d\n",ans);
return 0;
采纳吧