首页 > 其他分享 >[bzoj2818]gcd

[bzoj2818]gcd

时间:2024-08-22 12:37:37浏览次数:2  
标签:gcd .. int 筛出 个数 long bzoj2818

https://darkbzoj.cc/problem/2818

https://vjudge.net.cn/contest/649469#problem/Q

给定整数N,求1≤x,y≤N且gcd(x,y)为素数的数对(x,y)有多少对.

N≤10^7

分析:线性筛出不大于N的所有素数,枚举gcd(x,y)(设为p),问题转化为求(x,y)=p的个数。

设x=x'p, y=y'p,那么有(x,y)=1且1≤x,y≤N/p。

转化为求(x,y)=1且1≤x,y≤n的个数。

求(x,y)=1且1≤x,y≤N的个数:

若x≥y,对于x=1..n,有ϕ(x)个y满足(x,y)=1

若x≤y,对于y=1..n,有ϕ(y)个x满足(x,y)=1

若x=y,只有一种情况:(x=1, y=1)

所以答案为2(ϕ(1)+...+ϕ(n))-1

线性筛筛出欧拉函数、预处理前缀和即可

#include<iostream>
#define int long long
using namespace std;
const int N=10000010;
int n,p[N/10],cnt,phi[N];
typedef long long ll;
ll ans;
bool st[N];
signed main(){
    #ifdef LOCAL
    freopen("1.txt","r",stdin);
    #endif
    #ifndef LOCAL
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    #endif
    cin>>n;
    phi[1]=1;
    for(int i=2,k;i<=n;++i){
        if(!st[i])st[i]=1,p[++cnt]=i,phi[i]=i-1;
        for(int j=1;(k=p[j]*i)<=n;++j){
            st[k]=1;
            if(i%p[j]==0){
                phi[k]=phi[i]*p[j];
                break;
            }
            else phi[k]=phi[i]*(p[j]-1);
        }
    }
    for(int i=2;i<=n;++i)phi[i]+=phi[i-1];
    for(int i=1;i<=cnt;++i){
        int nn=n/p[i];
        ans+=2*phi[nn]-1;
    }
    cout<<ans;
    return 0;
}

标签:gcd,..,int,筛出,个数,long,bzoj2818
From: https://www.cnblogs.com/wscqwq/p/18373609

相关文章

  • 关于gcd
    处理区间max,min,gcd,and,or时间复杂度:预处理$O(n)$,查询$O(1)$template<typenameT>classSt{ usingVT=vector<T>; usingVVT=vector<VT>; usingfunc_type=function<T(constT&,constT&)>; VVTST; staticTdefault_func(......
  • [lnsyoj2246/luoguCF979D]Kuro and GCD and XOR and SUM
    题意给定集合\(S\),初始为空,进行\(q\)次修改或查询操作:修改操作将\(x\)加入集合;查询操作给定\(x,s,k\),要求找到满足\[\max_{u\inS,u+x\les,k|\gcd(u,x)}\{u\oplusx\}\]的最小的\(u\)。sol集合、异或、可查可改,可以自然地想到0/1-Trie。我们假设\(k=1\),此时不需......
  • GCD (最大公因数)的性质
    GCD的性质总结\(gcd(a_1,a_2,......a_n)=gcd(|a_1|,|a_2|,......|a_n|)\)\(gcd(a,0)=gcd(a,a)=|a|\)\(gcd(a_1,a_2,......a_{n-1},a_n)=gcd(gcd(a_1,a_2),a_3,......a_{n-1},a_n)\)对于不全为零的整数\(a_1,a_2,a_3,......a_{n-1},a_n\),$\forall1<k<n-1\(,......
  • iOS基础---多线程:GCD、NSThread、NSOperation
    系列文章目录iOS基础—多线程:GCD、NSThread、NSOperationiOS基础—CategoryvsExtension文章目录系列文章目录一、GCD1.GCD的任务、函数、队列a.任务b.函数c.队列2.GCD的使用a.同步函数+并发队列b.异步函数+并发队列c.同步函数+串行队列d.异步函数+串行队列e.同步函......
  • P10463 Interval GCD
    P10463IntervalGCD原题传送门思路首先,有个性质:对于任意多整数,它们的最大公约数与它们的差分序列的最大公约数相同,可以通过以下证明。\(\foralla,b,c\in\mathbb{N}\text{,有}\gcd(a,b,c)=\gcd(a,b-a,c-b)\)\(\text{证明:设}d\mida,d\midb,d\midc\)......
  • 基础数论 欧拉定理与exgcd
    欧拉定理:若正整数\(a,n\)互质,则\(a^{\varphi(p)}\equiv1(\bmodp)\)推论(扩展欧拉定理):\[a^b\equiv\begin{cases}a^{b\\bmod\\varphi(p)}\\\\\\\\\\gcd(a,p)=1\\a^b\\\\\\\\\\\\\\\\\\\\\\gcd(a,p)!......
  • 快速 GCD
    预处理GCD\(O(n)\)预处理,\(O(1)\)查询两个小于\(n\)的数的快速\(\gcd\)。引理对于任意正整数\(n\),可以将\(n\)写成\(n=abc\),满足\(a,b,c\)任意一个小于\(\sqrt{n}\)或为质数。考虑归纳,首先对于\(1\),显然成立。否则,设\(n\)的最小质因子为\(p\),设\(\dfrac{n......
  • gcd之和(一维)
    gcd之和求∑i=1n......
  • 二元一次不定方程(Exgcd)(更方便的解法)
    扩展欧几里得算法(Exgcd)裴蜀定理对于任意一组整数\(a,b\),存在一组整数\(x,y\),满足\(ax+by=\gcd(a,b)\)。Proof:考虑数学归纳法。当\(b=0\)时,由于\(\gcd(a,0)=a\),则对于\(ax+0y=a\)这个不定方程,\(x=1\),\(y\)取任意整数。假设存在一组整数\(x,y\),满足$bx+(a\bmodb)y......
  • 推式子——拓展欧几里德算法exgcd
    试求方程\(ax+by=\gcd(a,b)\)的一组整数解,其中\(a\)和\(b\)是给定的数提前准备好一个式子:辗转相除法\[\gcd(a,b)=\gcd(b,a\bmodb)\]同时我们可以注意到,\(\bmod\)的等价版本:\[a\bmodb=a-b\lfloor\frac{a}{b}\rfloor\]开始推式子首先考虑\(b=0\)的情况,因为......