zoukankan      html  css  js  c++  java
  • HYSBZ 2818 Gcd【欧拉函数/莫比乌斯】

    I - Gcd

     HYSBZ - 2818 

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

    Input

    一个整数N

    Output

    如题

    Sample Input4

    Sample Output4Hint

    hint

    对于样例(2,2),(2,4),(3,3),(4,2)

    1<=N<=10^7

    【分析】:欧拉函数计算互质个数 + 前缀和 + 次序不同算不同 + 去除1

    【代码】:

    #include<bits/stdc++.h>
    
    using namespace std;
    #define maxn 10000010
    #define maxp 700000
    #define _for(i,a,b) for(int i=(a); i<(b); i++)
    #define rep(i,a,b) for(int i=(a); i<=(b); i++)
    #define ll long long
    
    long long N, phi[maxn], s[maxn], tot, p[maxp], ans;
    
    void oula()
    {
        int i, j;
        for(i=1;i<=N;i++)phi[i]=i;
        for(i=2;i<=N;i++)
        {
             if(phi[i]==i)
             {
                p[++tot]=i;
                for(j=i;j<=N;j+=i)
                    phi[j]=phi[j]/i*(i-1);
             }
        }
        for(i=1;i<=N;i++)s[i]=s[i-1]+phi[i];
    }
    int main()
    {
        int i, j;
        scanf("%d",&N);
        oula();
        for(i=1;i<=tot;i++)
            ans=ans+(s[N/p[i]]<<1)-1;
        printf("%lld
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    JS高级拖拽
    JS高级Date类
    JS高级闭包
    JS笔记整理
    JS高级解决函数内的this指向
    JS高级事件委托
    JS高级 事件对象
    JS中级面向对象
    JS中级
    JS高级
  • 原文地址:https://www.cnblogs.com/Roni-i/p/8589125.html
Copyright © 2011-2022 走看看