一道水题、
题意:N个数中每个数都可以*2或*3,可以无限次数的*2或*3,问最N个数最后能否相同
思路:求出他们所有的最大公约数,将每个数都除以他们的最大公约数、 将剩下的数将他们包含2、3两个因子除尽,最后剩下的数如果不是1就说明他们是不可能相同的、因为他们不互质,所以一定不可能相同、
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=100005;
int n;
int ans,cnt;
int msq[maxn];
int gcd(int a,int b){
return (b>0)?gcd(b,a%b):a;
}
int main()
{
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++){
scanf("%d",&msq[i]);
}
ans=gcd(msq[0],msq[1]);
for(int i=2;i<n;i++){
ans=gcd(ans,msq[i]);
}
for(int i=0;i<n;i++){
msq[i]=msq[i]/ans;
}
for(int i=0;i<n;i++){
cnt=msq[i];
while(1){
if(cnt%2==0)
cnt=cnt/2;
if(cnt%3==0)
cnt=cnt/3;
if(cnt%2&&cnt%3)
break;
}
if(cnt!=1) break;
}
if(cnt==1) printf("Yes\n");
else printf("No\n");
}
return 0;
}