zoukankan      html  css  js  c++  java
  • BZOJ2818 Gcd

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818

    Description

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

    Input

    一个整数N

    Output

    如题

    懒得写题解就看黄学长的吧:http://hzwer.com/3466.html

    这题不难

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #include <cmath>
     6 #define rep(i,l,r) for(int i=l; i<=r; i++)
     7 #define clr(x,y) memset(x,y,sizeof(x))
     8 using namespace std;
     9 typedef long long ll;
    10 const int maxn = 10000010;
    11 int n,cnt=0,pri[maxn],phi[maxn];
    12 ll sum[maxn];
    13 bool flag[maxn];
    14 void get_phi(){
    15     clr(flag,0); phi[1] = 1;
    16     rep(i,2,n){
    17         if (!flag[i]) pri[++cnt] = i, phi[i] = i - 1;
    18         for(int j = 1; j <= cnt && i*pri[j] <= n; j++){
    19             flag[i*pri[j]] = 1;
    20             if (i % pri[j]) phi[i*pri[j]] = phi[i] * (pri[j] - 1);
    21             else{
    22                 phi[i*pri[j]] = phi[i] * pri[j];
    23                 break;
    24             }
    25         }
    26     }
    27     sum[1] = phi[1]; rep(i,2,n) sum[i] = sum[i-1] + phi[i];
    28 }
    29 int main(){
    30     scanf("%d",&n);
    31     get_phi();
    32     ll ans = 0;
    33     rep(i,1,cnt) ans += (sum[n/pri[i]] << 1) - 1;
    34     printf("%lld
    ",ans);
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    01-HTML控件
    08-多线程
    07-Log日志
    06-File-文件
    05-函数式编程
    04-异常使用处理
    03-常用包模块
    02-包
    Java NIO(六) Selector
    Java NIO(四) Scatter/Gather
  • 原文地址:https://www.cnblogs.com/jimzeng/p/bzoj2818.html
Copyright © 2011-2022 走看看