Codeforces Global Round 14-B. Phoenix and Puzzle-质因数拆解

Posted Chivas_/Regal

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Global Round 14-B. Phoenix and Puzzle-质因数拆解相关的知识,希望对你有一定的参考价值。

题目:
在这里插入图片描述
在这里插入图片描述
思路:
不得不说这个题的样例着实有点唬人害我WA了一发
我们不难得知如果因数没2,每个方块无法分成两个等腰三角形,所以必须有2
然后每个方块都可以由一个数num的平方分割成num*num个相等的方块
例如:18 = 2 * 3 * 3,可以先分解为9个相等的正方形,然后每个正方形再斜向分割一下,YES
再例如:450 = 2 * 3 * 3 * 5 * 5,可以先分解为9个相等的正方形,每个正方形再分解为25个相等的正方形,再斜向分割一下,YES

所以这个问题就转化为了:
1.查询是否有2这个因数
2.查询每个质因数的个数是否为偶数
采用质因数拆解

代码:

#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <map>
#include <queue>
#include <unordered_map>
#include <stack>
#include <string>
#include <vector>
#define IOS ios::sync_with_stdio(false)
#define rep1(i, a, n) for (int i = a; i <= n; i++)
#define rep2(i, a, n) for (int i = a; i >= n; i--)
#define each_cass(cass) for(cin >> cass; cass; cass--)
#define lowbit(x) (x&-x)
#define mm(a, b) memset(a, b, sizeof(a))
#define SP system("pause")
#define Chivas int main()
#define gcd(a,b) __gcd(a,b)
#define Regal return 0
typedef long long ll;
const int INF = 0x7FFFFFFF;
const double G = 10;
const double eps = 1e-6;
const double PI = acos(-1.0);
using namespace std;
 
 
 
inline void solve(){
    ll n;
    cin >> n;
    ll nn = n;
    vector<ll> div;//存放质因数
    unordered_map<ll, ll> cnt;//统计质因数的个数
    
    //质因数拆解
    for(ll i = 2; i * i <= nn; i ++){
        while(n % i == 0){
            if(!cnt[i]) div.push_back(i);//优化时间,每个质因数就放一次
            cnt[i] ++;
            n /= i;
        }
    }
    if(n != 1){
        if(!cnt[n]) div.push_back(n);
        cnt[n] ++;
        n /= n;
    }
    
    int flag = 0;//判断有没有2
    for(int i = 0; i < div.size(); i ++){
        if(div[i] == 2) flag=true;
        else{
            if(cnt[div[i]] & 1){//质因数不是2且个数为奇数
                cout << "NO" << endl;
                return;
            }
        }
    }
    if(!flag) cout << "NO" << endl;//没2
    else cout << "YES" << endl;
}
 
Chivas{
    IOS;
    int cass;
    each_cass(cass){
        solve();
    }
    Regal;
}

以上是关于Codeforces Global Round 14-B. Phoenix and Puzzle-质因数拆解的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Global Round 1

Codeforces Global Round 1

Codeforces Global Round 1

Codeforces Global Round 1

Codeforces Global Round 19

Codeforces Global Round 1 AParity