zoukankan      html  css  js  c++  java
  • 欧拉函数 cojs 2181. 打表

    cojs 2181. 打表

    ★☆   输入文件:sendtable.in   输出文件:sendtable.out   简单对比
    时间限制:1 s   内存限制:256 MB

    【题目描述】

    有一道比赛题目,输入两个整数x,y(1≤x,y≤n),输出某个函数f(x,y)。有位选手想打表(即事先计算出所有的f(x,y),写在源代码里),但是表太大了,原代码超过了比赛的限制,需要精简。

    好在那道题目有一个性质,使得很容易根据f(x,y)算出f(x*k,y*k)(其中k是正整数),这样有一些f(x,y)就不需要存在表里了。

    输入n(n≤50000),你的任务是统计最简的表里有多少个元素。例如,n=2时有3个(1,1),(1,2),(2,1)。

    【输入格式】

    输入只有一行,一个整数n;

    【输出格式】

    输出也仅有一行,即表里元素的个数。

    【样例输入】

    2
    

    【样例输出】

    3
     1 /*题目的要求可以这样理解,假设x<y求出小于y的所有与y互质的数的个数,这就是欧拉函数的定义了,然后因为x,y可以互换,所以最终的结果就是
     2 小于等于n,大于等于2的所有的数的欧拉函数*2+1(+1是因为有(1,1)这个情况)
     3 */
     4 #define N 50011
     5 #include<iostream>
     6 using namespace std;
     7 #include<cstdio>
     8 int phi[N+10]={0};
     9 int n;
    10 void get_phi()/*定义法求欧拉函数*/
    11 {
    12     phi[1]=1;
    13     for(int i=2;i<=N;++i)
    14     {
    15         if(!phi[i])
    16         {
    17             for(int j=i;j<=N;j+=i)
    18             {
    19                 if(!phi[j])
    20                   phi[j]=j;
    21                 phi[j]=phi[j]/i*(i-1);/*注意这里一定要先除后乘,因为它的定义中就是这样先进行除法,再进行减法*/
    22             }
    23         }
    24     }
    25 }
    26 int main()
    27 {
    28     freopen("sendtable.in","r",stdin);
    29     freopen("sendtable.out","w",stdout);
    30     get_phi();
    31     scanf("%d",&n);
    32     long long ans=0;
    33     for(int i=2;i<=n;++i)
    34       ans+=phi[i];
    35     cout<<(ans*2+1)<<endl;
    36     fclose(stdin);fclose(stdout);
    37     return 0;
    38 }
  • 相关阅读:
    SSH访问linux 乱码问题
    AppScan典型的工作流程
    安装&卸载功能 [测试思路]
    巴菲特
    AppScan 庐山真面目
    常见网页安全测试工具
    AppScan报告类型
    股票市场股票状态
    我的2010
    股票市场开盘时间
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5553061.html
Copyright © 2011-2022 走看看