CF #318 (Div. 2) C. Bear and Poker 唯一分解定理

来源:互联网 发布:win7服务器端口开放 编辑:程序博客网 时间:2024/06/15 08:34
http://codeforces.com/contest/574/problem/C
题意:给你m个数,判断这些数能否通过乘以2或者乘以3最后变成同一个数;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
#define MM(a) memset(a,0,sizeof(a))
typedef long long ll;
typedef unsigned long long ULL;
const int mod = 1000000007;
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const int big=50000;
int a[100005];
int main()
{
int n;
while(~scanf("%d",&n))
{
int flag=1;
for(int i=1;i<=n;i++)
{
scanf
("%d",&a[i]);
int temp=a[i];
while(temp%2==0||temp%3==0)
{
if(temp%2==0)
temp
/=2;
else if(temp%3==0)
temp
/=3;
}
if(i!=1&&temp!=a[i-1])
flag
=0;
else a[i]=temp;
}
if(flag)
cout
<<"Yes"<<endl;
else
cout
<<"No"<<endl;
}
return 0;
}

分析:素数唯一分解定理,即对于一个任意的数字m都可以转化成m=a^p1*b^p2...,,a,b,均是素数且这个分解是
唯一确定的。然后逆向思考
原创粉丝点击