首页 > 其他分享 >Codeforces Round 81 Same GCDs

Codeforces Round 81 Same GCDs

时间:2022-08-17 22:24:36浏览次数:90  
标签:gcd int Codeforces Same num 81 互质 GCDs

Same GCDs

原文
题意:
给定a,m 求x在 \([0,m)\) 中有多少数字满足 \(gcd(a,m) =gcd(a+x,m)\)

思路:

我们令\(g= gcd (a,m)\)
那么\(a = k_1g\) , \(m=k_2g\),且\(gcd(k_1,k_2) = 1\)

那么问题就变成了在\([a,a+m-1]\) 里面找到一个 x满足 \(x=k_3g, \ \ \ gcd (k_3,k_2)= 1\)

首先 x 需要满足是 g 的倍数,所以问题就变成了在区间 \([\frac{a}{g}, \frac{a + m - 1}{g}]\) 里面找和 k2 互质的数的个数。

然后用容斥原理区间[L,R]中与 k 互质的数的个数的板子即可
代码:

#include<bits/stdc++.h>
#define pii pair<int, int>
#define int long long
using namespace std;
const int N  = 1e3 + 10;
int a[N],num;
void getprime(int x){
    num=0;
    for(int i=2;i*i<=x;i++){
        if( x%i==0){
            a[num++]=i;
            while(x%i==0) 
                x/=i;
        }
    }
    if(x>1)  a[num++]=x;
}
int qu(int r,int x){
    getprime(x);
    int ans=0;
    for(int i=1;i<(1<<num);i++){
        int k=0;
        int mul=1;
        for(int j=0;j<=num;j++){
            if(i& (1<<j)){
                k++;
                mul*=a[j];
            }
        }
        if(k%2) ans+=r/mul;
        else ans-=r/mul;
    }
    if(ans<0) return 0;
    if(r-ans<0) return 0;
    return r - ans;
}
int que(int l,int r,int k){
    return qu(r,k)-qu(l-1,k);
}
int gcd(int a,int b)
{
    int  c=a%b;
    while(c!=0)
    {
        a=b;
        b=c;
        c=a%b;
    }
    return b;
}

void solve(){

    int a, m; cin >> a >> m;
    int g = gcd(a, m);
    int L = a / g, R = (a + m - 1) / g;
    cout<< que(L, R, m / g)<<endl;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
    cin >> t;
    while(t --)
     solve();
    return 0;
}

标签:gcd,int,Codeforces,Same,num,81,互质,GCDs
From: https://www.cnblogs.com/kingwz/p/16596970.html

相关文章

  • 20220817 第一组 于芮 mysql数据库查询(第三十四天)
     小白成长记——第三十四天   今天主要学习了mysql数据库的查询语句,对于一个合格的程序猿来说,掌握数据库的查询语句是非常重要的,所以今天不仅学习了理论知识,还作了......
  • Codeforces 1713C - Build Permutation
    题意为给出一个长度为n的空数组,数组下标为0至n-1。我们需要在数组中的每个位置上填上合适的数A[i],使得i+A[i]为完全平方数。并且数组最后需为0至n-1的一个排列。......
  • CF Round 814 Div2 题解
    A题ChipGame(签到)给定一个\(n\)行\(m\)列的方格矩阵,左下角是\((1,1)\),右上角是\((m,n)\)。(采取了类似笛卡尔坐标系的表示法,不是普通的\(x\)行\(y\)列)Burenka......
  • 批量修改海康摄像头gb28181配置
    由于本人所在公司是物联网业务巨多,平时跟海康摄像头打交道比较多。同时,公司使用GB28181协议播放视频流。当摄像头多了,一个一个配置就比较麻烦了。同时海康的SDK(HCNetSDK......
  • Codeforces Round #814 (Div. 2)
    A.ChipGame题目描述BurenkaandTonyaareplayinganoldBuryatgamewithachiponaboardofn\timesmcells.Atthebeginningofthegame,thechipisl......
  • Codeforces1698F Equal Reversal【构造】
    分析:注意到你无论如何都无法改变a[1]的值,而你要改变a[2]的值时,你就必须要选择一个和a[1]相同的值,然后翻转这一段区间。又可以发现,任意两个数的相邻情况是不会改变的。比......
  • Codeforces Round #814 (Div. 2)
    比赛链接CodeforcesRound#814(Div.2)D2.BurenkaandTraditions(hardversion)给出\(n\)个数,每次可以选择一个区间和一个数,将该区间的所有数异或上该数,代价为区......
  • 上网记录20220816
    一个dotnet数据库orm框架 https://github.com/leadnt/FluentDAO一个基于HttpClient的开源项目。只需要定义c#接口并修改相关特性,即可异步调用远程http接口的客户......
  • 《GB28381-2012》PDF下载
    《GB28381-2012离心鼓风机能效限定值及节能评价值》PDF下载《GB28381-2012》简介本标准规定了离心鼓风机的能效限定值、节能评价值及试验方法;本标准适用于单级双支撑......
  • 816笔记(动画)
    三大系列总结element.offsetWidth返回自身包括padding,边框,内容区的宽度,返回值不带单位element.clientWidth返回自身包括padding,内容区的宽度,不含边框,返回值不带单位......