首页 > 其他分享 >容斥原理与gcd的问题

容斥原理与gcd的问题

时间:2022-12-29 11:00:29浏览次数:62  
标签:gcd int res 容斥 long -- 原理

gcd个数的处理(i,j无限制)

P2398 GCD SUM
i为1-n,j为1-m,求gcd为k的个数

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e5+5;

int f[M];

signed main() {
    int n;cin>>n;
    for(int i=n;i>=1;i--) {
        f[i]=(n/i)*(n/i);
        for(int j=i+i;j<=n;j+=i)f[i]-=f[j];
    }
    //左边多少个数,右边多少个数
    int ans=0;
    for(int i=1;i<=n;i++)ans+=i*f[i];
    cout<<ans<<endl;
    return 0;
}
//可以求出每一对gcd的数量

(i<j)

CF--841--E
gcd个数处理+贪心
其实也就是在上面的基础上除2的处理

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e6+5;

int a[M];

signed main() {
    int TT;cin>>TT;
    while(TT--) {
        int n,m,ans=0;
        cin>>n>>m;
        for(int i=n;i>=2;i--) {
            int k=i-1;//一次多少边
            a[i]=(n/i)*(n/i-1)/2;
            for(int j=2*i;j<=n;j+=i)a[i]-=a[j];
            int w=a[i]/k*k;//多少边
            if(w>m)w=m/k*k;
            m-=w;
            ans+=w/k*(k+1);
        }
        if(m>0)cout<<"-1\n";
        else cout<<ans<<endl;
    }
    return 0;
}
//适用容斥进行相减即可

1-n中与n互质的数的个数

可以适用欧拉,也可以适用容斥

欧拉

int phi(int x) {
    int res = x;
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0) {
            res = res / i * (i - 1);
            while (x % i == 0) x /= i;//一次性消除全部i
        }
    if (x > 1) res = res / x * (x - 1);//有没有遗漏
    return res;
}

容斥

暂时不写,感觉没必要

标签:gcd,int,res,容斥,long,--,原理
From: https://www.cnblogs.com/basicecho/p/17011934.html

相关文章

  • 【Java技术专题】「原理专题」深入分析Java中finalize方法的作用和底层原理
    finalize方法是什么finalize方法是Object的protected方法,Object的子类们可以覆盖该方法以实现资源清理工作,GC在首次回收对象之前调用该方法。finalize方法与C++的析构函......
  • 你知道红外成像的原理吗?红外热成像有什么用处
    自然界中的物体,除了具有我们所熟悉的可见光图像外,还具有一种红外热辐射图像,但人的肉眼看不到红外热辐射,这是因为它所发出的是红外线,为不可见光。物体温度越高时它所发出的红......
  • 交换机工作原理
    园区网架构基础交换技术/二层技术路由技术不一定都是三层技术(如RIP封装在UDP520,OSPF封装在IP89)二层交换机工作在数据链路层,对数据帧进行操作。在收到数据帧后,交换机会......
  • AtCoder-abc230_g GCD Permutation 容斥
    J-GCDPermutation传送门:J-GCDPermutation知识点:素数筛、容斥定理、gcd题意:长度为n的一个排列a中,求满足\(gcd(i,j)!=1且gcd(a_i,a_j)!=1\)的i,j对数。i,j可以......
  • DEBUG 原理
    了解调试原理时看到了一个质量比较高的视频,【蛋饼嵌入式】一起探究调试原理。UP通俗,形象地讲解了DEBUG的一些原理,值得反复观看,但是视频不如文字查阅效率高,遂记录了以下......
  • Java原理性基础知识整理[详细]
    文章目录​​Java程序编译过程​​​​编译型和解析型语言​​​​命名规范​​​​编程风格​​​​大括号​​​​非C风格的数组声明​​​​阿里巴巴Java开发手册​​​......
  • MySQL索引背后的数据结构及算法原理
     摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多......
  • 系列篇|结构光三维重建——相移法基本原理
    在结构光三维重建中,最常见的方法就是相移法,相移是通过投影一系列相移光栅图像编码,从而得到物体表面一点在投影仪图片上的相对位置或者绝对位置。下面,笔者将详细介绍如何制作......
  • 一篇文章带你了解设计模式原理——UML图和软件设计原则
    一篇文章带你了解设计模式原理——UML图和软件设计原则我们在学习过程中可能并不会关心设计模式,但一旦牵扯到项目和面试,设计模式就成了我们的短板这篇文章并不会讲到二十......
  • visual hull算法的原理和仿真概述
    Visual-Hull+Bregman迭代      这个部分,算法,主要是实现一下效果,这里增加了迭代过程。具体原理如下所示:       这个迭代算法的作用就是通过不断的迭代,使其......