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 }
  • 相关阅读:
    Freemarker空值判断
    php集成开发环境IDE
    mysql卸载
    Apache网站根目录
    冒泡排序
    线程操作
    通过滚轮改变图片大小
    Timer计时器
    写异常日志
    异常处理
  • 原文地址:https://www.cnblogs.com/SilverNebula/p/5894679.html
Copyright © 2011-2022 走看看