首页 > 其他分享 >P2568 GCD

P2568 GCD

时间:2024-07-11 13:41:33浏览次数:16  
标签:prime break phi GCD 10000005 ll P2568 sumgcd1

原题链接

题解

令 \(g=gcd(i,j)\) 则 \(i=t_1i,j=t_2j\)
所以原题等价于求 \(\sum_{i\in prime} \sum gcd(x,y)==1,x\in[1,n/i],y\in[1,n/i]\)

也就是对于每个素数 \(i\),求 \([1,n/i]\) 内有几个数互质,我们可以求欧拉函数前缀和得出

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

vector<ll> prime;
bool mark[10000005]={0};
ll phi[10000005]={0};
ll sumgcd1[10000005]={0};

void solve()
{
    ll n;
    cin>>n;
    ll ans=0;
    for(auto it:prime)
    {
        if(it>n) break;
        ans+=sumgcd1[n/it];
    }
    cout<<ans<<'\n';

}
int main()
{

    sumgcd1[1]=1;
    for(ll i=2;i<=1e7;i++)
    {
        if(!mark[i])
        {
            prime.push_back(i);
            phi[i]=i-1;
        }

        for(auto it:prime)
        {
            if(it*i>1e7) break;
            mark[it*i]=1;

            if(i%it==0)
            {
                phi[it*i]=it*phi[i];
                break;
            }
            else
            {
                phi[it*i]=phi[it]*phi[i];
            }
        }

        sumgcd1[i]=sumgcd1[i-1]+2LL*phi[i];
    }

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


标签:prime,break,phi,GCD,10000005,ll,P2568,sumgcd1
From: https://www.cnblogs.com/pure4knowledge/p/18295992

相关文章

  • P2398 GCD SUM
    原题链接题解\(ans=\sum_{i=1}^{n}i*sum[i]\)其中\(sum[i]\)为最大公约数为\(i\)的对数令\(f[i]\)为最大公约数为\(i\)的倍数的对数则有\(sum[i]=f[i]-sum[2i]-sum[3i]-...-sum[ki]\)而\(f[i]={\lfloor\frac{n}{i}\rfloor}^2\)(如果没懂请仔细阅读题目所给符号......
  • D. Same GCDs
    原题链接题解\(\gcd(a+x,m)=\gcd((a+x)mod\m,m)\)由于\(x\in[0,m-1]\),所以\((a+x)mod\m\)一定能遍历完\([0,m-1]\)里的所有数所以\(\gcd(a+x,m)\)等价于\(\gcd(x,m)\)接下来,令\(d=\gcd(a,m)\),则有\(m=t_1d\),\(x=t_2d\),其中\(t_1\)与\(t_2\)互质(如果不互质,......
  • 题解:洛谷 P1890 gcd区间
    题解:洛谷P1890gcd区间标签:线段树,st表,分块,dp题意给定数列\(a\),有\(m\)次询问求区间\([l,r]\)的最大公约数。思路这道题有多种写法,如标签所示。线段树线段树可以维护具有结合性的操作,很明显\(\gcd\)满足。这道题线段树跑的慢是因为无修改操作,自然没有其他\(O(1)......
  • 用质因数求解最大公约数(gcd)和最小公倍数(lcm)
    用质因数求解最大公约数(gcd)思路分析:1、质因数:(素因数或质因子)他指的是能整除给定正整数的质数。例如:36可以分解为223*3,其中2和3就是质因数。2、质因数求解最大公约数:对每个数进行质因数分解;找出所有数的共有质因数,并取每个共有质因数的最低次幂;将这些最低次幂的质因......
  • P1072 [NOIP2009 提高组] Hankson 的趣味题【GCD】
    [NOIP2009提高组]Hankson的趣味题题目描述Hanks博士是BT(Bio-Tech,生物技术)领域的知名专家,他的儿子名叫Hankson。现在,刚刚放学回家的Hankson正在思考一个有趣的问题。今天在课堂上,老师讲解了如何求两个正整数......
  • 使用 GCD 实现属性的多读单写
    使用GrandCentralDispatch(GCD)实现多读单写的属性首先需要确保在多线程环境下的线程安全性。可以使用GCD提供的读写锁机制dispatch_rwlock_t或者dispatch_queue_t来实现这个功能。Swift版本的实现怎样创建一个并发队列?//使用Swift来实现的首个好处就是:......
  • 两个 GCD 经典问题
    相当Trivial的一篇东西。[ABC177E]Coprime给定\(n\)个数\(a_{1\simn}\),值域为\(V\)。求:是否全部互质是否两两互质问题1:是否全部互质即求\(\gcd\limits_{i=1}^na_i\)是否为\(1\)。直接\(1\simn\)辗转相除求\(\gcd\)。时间复杂度\(O(n+\logV)\)。(......
  • 最大公约数(gcd())和最小公倍数(lcm())的c语言和c++详细解法
    最大公约数(gcd())和最小公倍数(lcm())最大公约数:定义:两个或多个整数共有的约数中最大的一个。例如:整数12和18,他们的公约数有1、2、3、6,其中最大的公约数是6。c语言解法:辗转相除法和更相减损法1、辗转相除法:思路:先求解较大的数除以较小的数的余数,再用较小的数除以前......
  • CF1458A Row GCD
    题目链接:https://codeforces.com/problemset/problem/1458/A这道题比较考察对辗转相除法的理解.对于gcd的题目,gcd(a,b)=gcd(a,b-a)是一个很常见的trick,知道这个性质即可秒杀本题.gcd也可以像前缀和那样来维护还需要注意一个细节,由于a[i]-a[i-1]有可能出现负数,所以要先排序......
  • GCD-sequence(Round 950)
    #include<bits/stdc++.h>#defineendl'\n'usingll=longlong;typedefunsignedlonglongull;usingnamespacestd;voidGordenGhost();signedmain(){#ifdefGordenfreopen("in.txt","rt",stdin);freopen......