首页 > 其他分享 >2023湘潭邀请赛 E(容斥)

2023湘潭邀请赛 E(容斥)

时间:2023-05-31 19:12:06浏览次数:49  
标签:int res ans 容斥 infa fa 2023 邀请赛 mod

题目跳转:E

题意:

输入 x, k,求大小为 k 的 不同 集合个数,其中所有数的 gcd + lcm = x。

思路:

E

AC代码:

// -----------------
#include <bits/stdc++.h>
#define xx first
#define yy second
#define IOS ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
#define fixed fixed<<setprecision
#define endl '\n'
#define int long long
#define pb push_back
#define epb emplace_back
#define PII pair<int,int>

using namespace std;

int qmi(int a, int k, int p)
{ 
    int res = 1 % p;
    while (k)
    { 
        if (k & 1) res = res * a % p;
        a = a * a % p;
        k >>= 1; 
    }
    return res;
}
const int N1 = 1e6 + 10, mod = 1e9 + 7;

int fa[N1], infa[N1];
void initcp(int n)
{
    fa[0] = infa[0] = 1; 
    for (int i = 1; i < n; i ++ )
    {
        fa[i] = fa[i-1] * i % mod; 
        infa[i] = infa[i-1] * qmi(i, mod - 2, mod) % mod;
    }
}
int C(int a, int b)
{ 
    if(a < b) return 0; 
    return fa[a] * infa[a-b] % mod * infa[b] % mod;
}

const int N2 = 1e6 + 10;

int cntt, primes[N2], mob[N2];
bool stt[N2];
void initpr(int n)
{ 
    mob[1] = 1; for(int i = 2; i <= n; i ++)
    { 
        if(!stt[i]) primes[cntt ++] = i,mob[i] = -1;
        for(int j = 0; primes[j] * i <= n; j ++)
        {
            int t = primes[j] * i;
            stt[primes[j] * i] = true; 
            if (i % primes[j] == 0)
            {
                mob[t] = 0; 
                break; 
            } 
            mob[t] = mob[i] * (-1);
        }
    }
}

int x,k,ans;

void cal(int m)
{
    m -= 1;
    if(m == 0) return;
    // 分解质因子并存下来
    vector<PII> f;
    for(int i = 2; i * i <= m; i ++)
    {
        if(m % i) continue;
        int cnt = 0;
        while(m % i == 0) m /= i,cnt ++;
        f.epb(i,cnt);
    }
    if(m != 1) f.epb(m,1);
    
    // 根据不同的质因子枚举所有情况
    m = f.size();
    for(int i = 0; i < (1 << m); i ++)
    {
        for(int j = 0; j < (1 << m); j ++)
        {
            int res = 1, ff = 0;
            for(int k = 0; k < m; k ++)
            {
                int cc = f[k].yy + 1;
                if(i >> k & 1) ff ^= 1,cc --;
                if(j >> k & 1) ff ^= 1,cc --;
                res = res * max(0ll, cc);
            }
            // 容斥加减
            if(ff) ans = (ans - C(res, k) + mod) % mod;
            else ans = (ans + C(res, k)) % mod;
        }
    }
}

void solve()
{
    cin >> x >> k;
    // 计算x的因子的所有可能
    for(int i = 1; i * i <= x; i ++)
    {
        if(x % i) continue;
        cal(i);
        if(i * i != x) cal(x / i);
    }
    cout << (ans + mod) % mod  << endl;
}

signed main()
{
    IOS initcp(1000010); initpr(1000010);
    int T = 1;
    //cin >> T;
    while(T --) { solve(); }
    return 0;
}

标签:int,res,ans,容斥,infa,fa,2023,邀请赛,mod
From: https://www.cnblogs.com/liqs2526/p/17447081.html

相关文章

  • 【2023 · CANN训练营第一季】——应用开发深入讲解——模型转换的ATC工具
    前言: 做一个推理应用,首先从模型转换开始(当然先得选好一个合适的模型)。在昇腾平台做模型推理,需要将Caffe,TensorFlow等开源框架网络模型转换成Davinci架构专用模型(OM格式)。昇腾张量编译器(AscendTensorCompiler,简称ATC)是异构计算架构CANN体系下的模型转换工具,模型转换过程中,ATC会进......
  • 【2023 · CANN训练营第一季】——开发者套件进阶,玩转智能小车课程笔记
    前言:基于新款开发者套件Atlas200IDKA2的智能小车,采用人工智能的方法,对摄像头采集到实时影像进行推理,产生电机等运动机构的控制指令,在特定环境里,实现自动行驶、自动泊车、目标跟踪等功能。昇腾官方开源了“玩”小车的全部软、硬件资料,还准备了模拟环境,让还没有小车的小伙伴体验自......
  • 某书x-s算法(2023-05-30更新)
     服务器2023-05-30更新了x-s算法,主要位置如下: 将其全部复制下来,放入浏览器测试(HTML代码如下):<!DOCTYPEhtml><html><head><metacharset="utf-8"/><title>X-s,X-t算法测试,技术支持:V:byc6352,日期:2023-5-31</title><scriptsrc="xs.j......
  • 2023广东省程序设计大赛F题
    思路:我们把先把所有状态和值用线段树或树状数组记录下来(因为他是连续的区间,相当于一段区间的不同状态的和)再通过二分或者倍增找出这段区间及找出左右端点1:线段树或者着树状数组维护的有两个,一个是前缀和(不管状态),一个是颜色和就是状态2:左右端点查找:一个点对应一个颜色,我们假设从......
  • pkusc2023 d1t3
    整自闭了,快一个月后才想出来怎么做。设点\(i\)是1的概率为\(p_i\),定义\(P_i(x)=1-p_i+p_ix\)。那么\(p_i\)是\(i\)的儿子节点和自己的\(P(x)\)卷起来后取后一半的系数和。树上修改很魔怔,考虑ddp。维护每个点轻儿子和自己的\(\prodP(x)\),记为\(S_i(x)\),设一共有......
  • 【2023 · CANN训练营第一季】——搭建环境:创建ECS,下载sample仓
    前言:        本文是环境搭建的第一篇笔记。主要包括下面两方面内容:    1、在华为云上创建ECS服务器,并修改Ubuntu源和pip源为国内镜像地址。        2、为了更好的使用ECS,需要在本地安装远程连接和查看代码的工具软件,以Windows为例介绍几个常用的工具软件。......
  • CVE-2023-33246学习
    1.参考学习CVE-2023-33246https://github.com/I5N0rth/CVE-2023-332462.本地搭建环境2.1下载镜像#dockerpullapache/rocketmq:4.9.1#dockerpullapacherocketmq/rocketmq-console:2.0.02.2启动broker、namesrv、console启动namesrvdockerrun-dit-p9876:987......
  • 欧拉函数与容斥
    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:给定五个数,其中有和,求满足条件的有序对的个数。题目中    明确说在所有的输入中。分析:问题可以转化为和时,的有序对的个数。那么先比较和的    大小,相同的部分可以用欧拉函数的累加计算,没有公共的部分用容斥计算......
  • 西门康IGBT模块存在sql注入 QTVA-2023-3632489
    网址:http://www.gl-igbt.com/product.php?id=6 漏洞描述: 西门康igbt模块,采购平台,便捷购买,专业代理,售后无忧,大量现货供应,模块齐全,可直接供货,一键下单,整流桥功率,西门康一站式采购平台,可长期稳定供货 西门康IGBT模块存在sql注入漏洞,攻击者可利用该漏洞获取数据库......
  • 2023ccpc大学生程序设计竞赛-zzh
    比赛开始没有开到签到题,看了一会别的题才开始跟榜。A题我写的,不过没有考虑到S长度为1的情况,wa了一次。然后lhy和zx把F题做了出来。接着他俩去看H,我去看B。他俩把H过了,B我想出了一个n*根n的做法,T了。lhy感觉E是DP,去看E,我和zx去看K。lhy把E过了,我俩K还没思路。接着他俩看B,想了快......