• Educational Codeforces Round 89 (Rated for Div. 2)D. Two Divisors


    这是道很有意思的数论题

    题目链接

    https://codeforces.com/contest/1366/problem/D

    题目大意

    给你一个长度为 N 的数组 a , 对于数组中的每个数 ai

    你需要找到 ai 的两个因子 d1 , d2 使得 gcd(d1 + d2 , ai) = 1 

    解题思路

    设 p1 , p2 , p3 , ... , pm 为 ai 的质因子 , d1 = p1^k , d2 = ai / p1^k

    其中 p1 为 ai 的最小质因子 , ai % p^k = 0 且 ai % p1^(k + 1) != 0

    那么显然 $left( d_{1}+d_{2} ight) \% p_{1} eq 0,left( d_{1}+d_{2} ight) \% p_{2} eq 0,ldots ,left( d_{1}+d_{2} ight) \% p_{m} eq 0$

    所以 ai 的所有质因子 d1 + d2 都不包含 , 即 d1 + d2 与 ai 互质 ( 当 d2 = 1 时答案为 -1 )

    而本题数据范围很大 , 所以我们得先用线性筛找出 1 ~ 1e7 内每个数的 p1 然后再操作

    AC_Code

    #include<bits/stdc++.h>
    using namespace std;
    int prime[10000100],minprime[10000100];
    int euler(int n)
    {
        int c = 0;
        for(int i = 2 ; i <= n ; i ++)
        {
            if(!minprime[i]) prime[++ c] = i , minprime[i] = i;
            for(int j = 1 ; j <= c && i * prime[j] <= n ; j++)
            {
                minprime[i * prime[j]] = prime[j];
                if(i % prime[j] == 0) break;
            }
        }
        return c;
    }
    const int N = 5e5 + 10;
    int n , a[N] , ans[N][2];
    signed main()
    {
        ios::sync_with_stdio(false);
        euler(1e7);
        cin >> n;
        for(int i = 1 ; i <= n ; i ++) cin >> a[i];
        for(int i = 1 ; i <= n ; i ++)
        {
            int x = a[i] , now = 1 , mi = minprime[x];
            while(x % mi == 0) x /= mi , now *= mi;
            if(now != 1 && x != 1) ans[i][0] = now , ans[i][1] = x;
            else ans[i][0] = -1 , ans[i][1] = -1;
        }
        for(int j = 0 ; j <= 1 ; j ++)
        {
            for(int i = 1 ; i <= n ; i ++) cout << ans[i][j] << " ";
            cout << '
    ';
        }
        return 0;
    }
    凡所不能将我击倒的,都将使我更加强大
  • 相关阅读:
    【uniapp】改善中大型uniapp小程序项目开发体验
    vite试玩:老项目启动从6分钟到秒开
    修剪AST树减少webapck打包尺寸
    librispeech数据集下载
    语音识别性能评估方法
    2021.12.11 物联网考试
    2021.12.15 课程总结+加分项
    2021.12.9 观影大数据分析
    2021.12.8 Docker服务
    2021.12.10 阿里云服务器创建
  • 原文地址:https://www.cnblogs.com/StarRoadTang/p/13099862.html
Copyright © 2020-2023  润新知