zoukankan      html  css  js  c++  java
  • bzoj 2190: [SDOI2008]仪仗队

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #define M 40005
     5 using namespace std;
     6 int ans,n,phi[M],q[M],tot,f[M];
     7 int main()
     8 {
     9     scanf("%d",&n);
    10     phi[1]=1;
    11     for(int i=2;i<n;i++)
    12       {
    13         if(!f[i])
    14           {
    15             tot++;
    16             q[tot]=i;
    17             phi[i]=i-1;
    18             }
    19         for(int j=1;j<=tot;j++)
    20           {
    21             if(q[j]*i>n)
    22               break;
    23             f[q[j]*i]=1;
    24             if(i%q[j])
    25               phi[i*q[j]]=phi[i]*(q[j]-1);
    26             else
    27               phi[i*q[j]]=phi[i]*q[j];
    28           }
    29       }
    30     for(int i=1;i<n;i++)
    31       ans+=phi[i];
    32     printf("%d
    ",2*ans+1);
    33 }

    由题目可知 就是求互质的点对数目,如果把它按对角线分开处理,与i互质的数为phi(i),用线性筛求欧拉函数。

  • 相关阅读:
    Set,List,Map的区别
    阅读笔记15
    阅读笔记14
    阅读笔记13
    阅读笔记12
    阅读笔记11
    阅读笔记10
    架构漫谈读后感
    阅读笔记1
    暑期周记8
  • 原文地址:https://www.cnblogs.com/xydddd/p/5299244.html
Copyright © 2011-2022 走看看