• 欧拉函数


    模板

     1 #include<stdio.h>
     2 const int MAXN=3000010;
     3 bool  vis[MAXN];
     4 int prime[MAXN/10];
     5 long long euler[MAXN];
     6 int main()
     7 {
     8     int i,j,temp,top;
     9     int  n;
    10     top=0;
    11     euler[1]=1;
    12     for (i=2; i<MAXN; i++)
    13     {
    14         if (!vis[i])
    15         {
    16             prime[top++]=i;
    17             euler[i]=i-1;///质数p的欧拉函数=p-1
    18         }
    19         for(j=0;prime[j]*i<MAXN;j++)
    20         {
    21             vis[prime[j]*i]=1;
    22             if(i%prime[j]==0)///遇到最小素因数退出循环
    23             {
    24                 ///因为i去除过prime[j]的倍数,所以不需要再次去除
    25                 euler[i*prime[j]]=euler[i]*prime[j];
    26                  break;
    27             }
    28             else
    29             {
    30                 ///因为i不含有prime[j],需要去除prime[j]的倍数
    31                 ///因为i与prime[j]互质
    32                 ///=> euler[i*prime[j]]=euler[i]*euler[prime[j]];
    33                 euler[i*prime[j]]=euler[i]*(prime[j]-1);
    34             }
    35         }
    36     }
    37     for(i=2;i<MAXN;i++)
    38     {
    39         euler[i]+=euler[i-1];///对欧拉函数求前缀和
    40     }
    41     int a,b;
    42     while(scanf("%d%d",&a,&b)!=EOF)
    43     {
    44         printf("%I64d
    ", euler[b]- euler[a-1]);
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    第十二周作业
    第十二周上机练习
    第十一周作业
    第十一周上机练习
    第十周上机作业
    第九周上机练习
    第八周作业
    软件测试第一次作业
    Jsp第二次作业
    JSP第一次作业
  • 原文地址:https://www.cnblogs.com/yZiii/p/7285872.html
Copyright © 2020-2023  润新知