问题标题: 酷町堂:1456

0
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;

采纳吧

我要回答