zoukankan      html  css  js  c++  java
  • UVa10820 Send a Table

    只有互质的数对才对答案有贡献。

    假设有一个数x,和它互质的数的个数就是它的欧拉函数。

    1<=x<=n,所以要求欧拉函数前缀和。

    把数对前后两个数颠倒,总答案数为前缀和乘2

    (1,1)不能颠倒

    所以:求出欧拉函数前缀和,乘2,减1,就是答案。

     1 /*by SilverN*/
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 using namespace std;
     8 const int mxn=51000;
     9 int phi[mxn];
    10 int sum[mxn];
    11 void Euler(){
    12     int i,j;
    13     phi[1]=1;
    14     for(i=2;i<mxn;i++)
    15         if(!phi[i]){
    16             for(j=i;j<mxn;j+=i){
    17                 if(!phi[j])phi[j]=j;
    18                 phi[j]=phi[j]/i*(i-1);
    19             }
    20         }
    21     for(i=1;i<mxn;i++)sum[i]=sum[i-1]+phi[i];
    22     return;
    23 }
    24 int ans;
    25 int n;
    26 int main(){
    27     Euler();
    28     while(scanf("%d",&n) && n){
    29         printf("%d
    ",2*sum[n]-1);
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    Spring 增强类型
    Spring IOC及Bean的生命周期
    Spring
    Mybatis注解
    MyBatis关联查询
    LoadRunner(1)
    Selenium(6)
    Selenium(5)
    Selenium(4)
    Selenium(3)
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5894679.html
Copyright © 2011-2022 走看看