zoukankan      html  css  js  c++  java
  • 【bzoj2190】[SDOI2008]仪仗队 数论 欧拉函数 筛法

    http://www.lydsy.com/JudgeOnline/problem.php?id=2190

     
    裸欧拉函数,先不计算对角线(a,a)的一列,然后算出1到n-1的所有欧拉函数相加*2,再加上对角线能看到的1个即可。
    欧拉函数:φ(x)表示xy互质且y<x的y的个数.
    筛法求解,
    φ(x)是积性函数满足
    1.当x与y互质时φ(x*y)=φ(x)*φ(y).
    2.x为质数时,φ(x)=x-1;
    3.x%y=0时,φ(x*y)=φ(x)*y.
     
    代码
     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring>  
     4 #include<algorithm>  
     5 #include<cmath>  
     6 using namespace std;
     7 const int maxn=50100;
     8 int n;
     9 int cnt[maxn]={};
    10 int su[maxn]={},tot=0;
    11 bool vis[maxn]={};
    12 int main(){
    13     scanf("%d",&n);cnt[1]=1;
    14     for(int i=2;i<=n;i++){
    15         if(!vis[i])su[++tot]=i,cnt[i]=i-1;
    16         for(int j=1;j<=tot;j++){
    17             if(i*su[j]>n)break;
    18             vis[i*su[j]]=1;
    19             if(i%su[j]==0){cnt[i*su[j]]=cnt[i]*su[j]; break;}
    20             cnt[i*su[j]]=cnt[i]*cnt[su[j]];
    21         }
    22     }int ans=0;
    23     for(int i=1;i<n;i++){
    24         ans+=cnt[i];
    25     }
    26     printf("%d
    ",ans*2+1);
    27     return 0;
    28 }
    View Code
     
  • 相关阅读:
    203. Remove Linked List Elements
    86. Partition List
    143. Reorder List
    876. Middle of the Linked List
    246. Strobogrammatic Number
    202. Happy Number
    数据类型转换
    表达式
    面向对象
    对齐
  • 原文地址:https://www.cnblogs.com/137shoebills/p/7787007.html
Copyright © 2011-2022 走看看