首页 > 其他分享 >8.24

8.24

时间:2022-08-25 16:11:22浏览次数:47  
标签:gcd int sum long 8.24 mod define

ABC212G

题意:

给定数字\(P\)

求有多少对\((x,y)\),满足\(0\leq x,y<P\),而且存在正整数\(n\),满足\(x^n\equiv y\ (mod\ P)\)

\(P\leq 10^{12}\),\(P\)是质数

设\(r\)是\(P\)的原根

那么\(x,y\)可以表示为\(x=r^a,y=r^b\)

原式为\(r^{an}=r^b\ (mod\ P)\)

把指数拿下来

\(an=b\ (mod\ P-1)\)

设\(n=P-1\)

于是答案是\((\sum_{i=1}^{n}\frac{n}{gcd(n,i)})+1\)

加一是因为有\((0,0)\)

按照套路,把枚举\(i\)变成枚举\(g=gcd(n,i)\)

\(\sum_{g|n}\frac{n}{g}*f(g)\)

其中\(f(g)=\sum_{i=1}^n[gcd(n,i)==g]\)

因为\(n\)的因数不多,假设数量为\(m\),容斥求\(f(g)\)的复杂度是\(O(m^2)\)

所以复杂度就是\(O(\sqrt{n}+m^2)\)

#include<bits/stdc++.h>
using namespace std;
namespace red{
#define int long long
#define double long double
#define ls(p) (p<<1)
#define rs(p) (p<<1|1)
#define lowbit(i) ((i)&(-i))
#define mid ((l+r)>>1)
#define eps (1e-15)
    const int N=1e6+10,mod=998244353,inv2=5e8+4,inf=2e15;
    void __init(int n=2000) {}
    
    inline void main()
    {
        int n;
        cin>>n;
        --n;
        int ans=1;
        vector<int> d;
        for(int i=1;i*i<=n;++i)
        {
            if(n%i==0)
            {
                d.emplace_back(i);
                if(i*i!=n) d.emplace_back(n/i);
            }
        }
        sort(d.begin(),d.end());
        int m=d.size();
        vector<int> f(m);
        for(int i=m-1;i>=0;--i)
        {
            f[i]=n/d[i];
            for(int j=i+1;j<m;++j)
            {
                if(d[j]%d[i]==0) f[i]-=f[j];
            }
        }
        for(int i=0;i<m;++i) ans=(ans+((n/d[i])%mod*(f[i]%mod))%mod)%mod;
        cout<<ans<<'\n';
    }
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    red::__init();
    int qwq=1; //cin>>qwq;
    while(qwq--) red::main();
    return 0;
}
/*

*/

标签:gcd,int,sum,long,8.24,mod,define
From: https://www.cnblogs.com/knife-rose/p/16624593.html

相关文章

  • 8.24总结
    寿司考场上我对于这道题第一眼感觉是DP(反正不会是数据结构),但n的数据范围太大了,我没有想到O(n)的DP。于是考虑是否是贪心,但考场上我推出的贪心式子有问题。我是通过枚举每......
  • 2022.8.24 颓废记录
    Preface不想上学。Content[CF827C]DNAEvolution给定一个字符串\(s\)。\(Q\)次询问,每次有两种操作:1xc,表示把\(s\)的第\(x\)个字符换成\(c\)。2lre......
  • 暑假学习二 8.24
    今日学习内容补充:1.hadoop介绍:狭义:核心组件,Hadoophdfs 分布存储yarn  资源管理和任务调度框架mapreduce 计算 (企业基本不再直接使用) 广义:围绕Hadoop打......
  • 【2022.8.24】前端开发(3)
    学习内容概要盒子模型浮动布局定位属性z-indexJavaScript基础语法内容详细盒子模型所有的标签都可以看成是一个快递盒1.两个快递盒之间的距离标签之间......
  • 达内培训Week2 集合01 8.24
    集合018.24什么是集合:集合和数组类似,可以保存一组元素,并且提供了操作数组元素的方法,使用方便。Java集合框架接口Java.util.Collection接口:所有结合的接口,封装......
  • MxDraw云图平台 2022.08.24更新
     SDK开发包下载地址:https://www.mxdraw.com/ndetail_30187.html1.增加对像扩展数据功能2.增加CADGIS使用功能  https://www.mxdraw3d.com/sample/vuemapbox/?cm......