zoukankan      html  css  js  c++  java
  • GCD

    题目描述

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

    输入输出格式

    输入格式:

    一个整数N

    输出格式:

    答案

    输入输出样例

    输入样例#1:
    4
    输出样例#1:
    4

    说明

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

    1<=N<=10^7

    首先我们枚举gcd(x,y)=p的p,那么gcd(x/p,y/p)肯定互质,也就是求在[1,n/p](向下取整)范围内的欧拉函数的前缀和,再乘2(因为x和y可以交换),最后再处理一下x是一个质数,gcd(x,x)=x满足题意的情况即可。

    直接用欧拉函数线性筛法就行了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 using namespace std;
     7 long long phi[10000005],ans;
     8 bool mark[10000005];
     9 int n,tot,prime[5000005];
    10 int main()
    11 {long long i;
    12 long long j;
    13     cin>>n;
    14     for (i=2;i<=n;i++)
    15     {
    16         if (mark[i]==0)
    17         {
    18             prime[++tot]=i;
    19             phi[i]=i-1;
    20         }
    21         for (j=1;j<=tot;j++)
    22         {
    23             long long k=i*prime[j];
    24          if (k>n) break;
    25          mark[k]=1;
    26          if (i%prime[j]==0)
    27          {
    28              phi[k]=phi[i]*prime[j];
    29              break;
    30          }
    31          else phi[k]=phi[i]*(prime[j]-1);
    32         }
    33         phi[i]=phi[i-1]+phi[i]*2;
    34     }
    35  for (i=1;i<=tot;i++)
    36  {
    37      ans+=phi[n/prime[i]]+1;
    38  }
    39  cout<<ans;
    40 }
  • 相关阅读:
    异常单据锁定涉及的数据库表
    用友通只启用核算模块
    一个迟到MM如何让老师疯掉的
    偷偷看,别笑出声啊
    安装时又提示删除程序
    自动折行的设置
    酒后百态新编 恶搞
    系统管理中“站点”“运行状态”的含义
    神经病女士银行取钱
    HDOJ 1017
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7115808.html
Copyright © 2011-2022 走看看