zoukankan      html  css  js  c++  java
  • 2818: Gcd

    2818: Gcd

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 3518  Solved: 1554
    [Submit][Status][Discuss]

    Description

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

     那么我们求

    Input

    一个整数N

    Output

    如题

    Sample Input

    4

    Sample Output

    4

    HINT

    hint

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


    1<=N<=10^7;

    思路:欧拉函数;

    要求<=N有多少对数的gcd是素数;

    但这些数对除去最大公约数时他们的最大公约数是1,那么我们只要筛选出[1,N]的素数。

    素数的数组是a[];那么在[1,N]中找含有素数a[i]的数那么就是N/a[i]个,然后求这些数的每个的欧拉函数,再前缀和加下,除了oula[1]外,oula[]*=2;

    枚举每个小余等于N的素数加oula[]前缀和;

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<stdlib.h>
     5 #include<string.h>
     6 #include<math.h>
     7 using namespace std;
     8 typedef long long LL;
     9 int ans[1000000];
    10 LL oula[10000005];
    11 LL ask[10000005];
    12 int  ola(int n);
    13 int main(void)
    14 {
    15         int i,j,k;
    16 
    17         LL n,m;
    18         scanf("%lld",&n);
    19         int cnt=ola(n);
    20         LL sum=0;
    21         for(i=0; i<cnt; i++)
    22         {
    23                 sum+=oula[n/ans[i]];
    24         }
    25         printf("%lld
    ",sum);
    26         return 0;
    27 }
    28 int  ola(int n)
    29 {
    30         int i,j;
    31         oula[1]=1;
    32         int cnt=0;
    33         for(i=0;i<=n;i++)
    34         {
    35             oula[i]=i;
    36         }
    37         for(i=2; i<=n; i++)
    38         {
    39                 if(oula[i]==i)
    40                 {
    41                         for(j=i; j<=n; j+=i)
    42                         {
    43                                 oula[j]=oula[j]/i*(i-1);
    44                         }
    45                 }
    46         }
    47         for(i=2; i<=n; i++)
    48         {
    49                 if(oula[i]==i-1)
    50                 {
    51                         ans[cnt++]=i;
    52                 }
    53         }
    54         for(i=2; i<=n; i++)
    55         {
    56                 oula[i]*=2;
    57                 oula[i]+=oula[i-1];
    58         }
    59         return cnt;
    60 }
    油!油!you@
  • 相关阅读:
    上一章下一章
    三、Spring-Bean高级装配
    二、Spring装配Bean
    IDEA--IDEA debug断点调试技巧
    springboot基础
    一、初识Spring
    十、理解JavaBean
    # 记一次Tomcat升级——幽灵猫
    CentOS7离线安装ansible的方法
    【转发】
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5469438.html
Copyright © 2011-2022 走看看