zoukankan      html  css  js  c++  java
  • [CF1366D] Two Divisors

    Description

    (n) 个询问,每次给定一个数 (a le 10^7),求其是否存在两个不为 (1) 的不同因子 (d_1,d_2) 满足 ((d_1+d_2,a)=1)

    Solution

    (x=p_1^{q_1} p_2^{q_2} ... p_k^{q_k})$,则 (k=1) 时显然无解,考察 (k>1) 时,利用反证法可以证明令 (a=p_1^{q_1}, b=p_2^{q_2} ... p_k^{q_k}),则一定满足 ((a+b,x)=1)

    于是问题转化为寻找一个数的最小质因子。

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1e7 + 5;
    int t, n, minfactor[N];
    
    int main()
    {
        for (int i = 1; i < N; i++)
            minfactor[i] = i;
        for (int i = 2; i * i < N; i++)
            if (minfactor[i] == i)
            {
                for (int j = i * i; j < N; j += i)
                    if (minfactor[j] == j)
                        minfactor[j] = i;
            }
        ios::sync_with_stdio(false);
    
        cin >> n;
    
        vector<int> ans[2];
        while (n--)
        {
            int x;
            cin >> x;
            int t = x;
            while (t % minfactor[x] == 0)
                t /= minfactor[x];
            if (t == 1)
            {
                for (int i = 0; i < 2; i++)
                    ans[i].push_back(-1);
            }
            else
            {
                ans[0].push_back(t);
                ans[1].push_back(x / t);
            }
        }
    
        for (int i = 0; i < 2; i++)
        {
            for (auto x : ans[i])
                cout << x << " ";
            cout << endl;
        }
    }
    
  • 相关阅读:
    布局
    JS基础回顾_滚动条
    JS基础回顾_Dom
    JS语法_其他
    JS语法_类型
    一些免费的API
    CSS特效(一)
    博客园在Markdown中使用JS
    C# 聊一聊屏保的设置 第一步 注册表
    2019 力扣杯-全国高校春季编程大赛 最长重复子串
  • 原文地址:https://www.cnblogs.com/mollnn/p/14082370.html
Copyright © 2011-2022 走看看