Coderforce-574C Bear and Poker(素数唯一分解定理)
题目大意:给出n个数,问能不能通过让所有的数都乘以2的任意幂或乘以3的任意幂,使这n个数全都相等。
题目分析:最终n个数都是相等的,假设那个数为x,根据素数唯一分解定理,x能分解成m*2p3q。所以,只需将所有的a[i]一直除以2并且一直除以3,最终只需判断这n个数是否全部相等即可。
代码如下:
# include<iostream>
# include<cstdio>
# include<cmath>
# include<string>
# include<vector>
# include<list>
# include<set>
# include<map>
# include<queue>
# include<cstring>
# include<algorithm>
using namespace std;
# define LL long long
# define REP(i,s,n) for(int i=s;i<n;++i)
# define CL(a,b) memset(a,b,sizeof(a))
# define CLL(a,b,n) fill(a,a+n,b)
const double inf=1e30;
const int INF=1<<30;
const int N=100005;
int n;
LL a[N];
void f(LL &k)
{
while(k%2==0) k/=2;
while(k%3==0) k/=3;
}
bool judge()
{
REP(i,1,n) if(a[i]!=a[0]) return false;
return true;
}
int main()
{
while(~scanf("%d",&n))
{
REP(i,0,n){
scanf("%lld",a+i);
f(a[i]);
}
if(judge()) printf("Yes\n");
else printf("No\n");
}
return 0;
}


浙公网安备 33010602011771号