本文主要是介绍CF #318 (Div. 2) C. Bear and Poker 唯一分解定理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://codeforces.com/contest/574/problem/C
题意:给你m个数,判断这些数能否通过乘以2或者乘以3最后变成同一个数;
分析:素数唯一分解定理,即对于一个任意的数字m都可以转化成m=a^p1*b^p2...,,a,b,均是素数且这个分解是#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;
}
唯一确定的。然后逆向思考
这篇关于CF #318 (Div. 2) C. Bear and Poker 唯一分解定理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!