zoukankan      html  css  js  c++  java
  • 欧拉函数计算及打表

     1 #include<bits/stdc++.h>
     2 #define ll long long 
     3 #define scan(i) scanf("%d",&i)
     4 #define scand(i) scanf("%lf",&i)
     5 #define scanl(i) scanf("%lld",&i)
     6 #define f(i,a,b) for(int i=a;i<=b;i++) 
     7 #define pb(i) push_back(i)
     8 #define ppb pop_back()
     9 #define pf printf
    10 #define dbg(args...) cout<<#args<<" : "<<args<<endl;
    11 using namespace std;
    12 #define Max 100001
    13 int euler[Max];
    14 void init(){
    15      euler[1]=1;
    16      for(int i=2;i<Max;i++)
    17        euler[i]=i;
    18      for(int i=2;i<Max;i++)
    19         if(euler[i]==i)
    20            for(int j=i;j<Max;j+=i)
    21               euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出
    22 }
    23 //用通式算的
    24 int Euler(int n){ //返回euler(n)
    25     int res=n,a=n;
    26     for(int i=2;i*i<=a;i++){
    27         if(a%i==0){
    28             res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出
    29             while(a%i==0) a/=i;
    30         }
    31     }
    32     if(a>1) res=res/a*(a-1);
    33     return res;
    34 } 
    35 int eulercal(int n){
    36     int ret=n;
    37     for(int i=2;i<=sqrt(n);i++)
    38     if(n%i==0){
    39         ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i)))
    40         while(n%i==0) n/=i;
    41      }
    42     if(n>1) ret=ret/n*(n-1);
    43     return ret;
    44 }
    45 int main()
    46 {    init();
    47     int a;
    48     ll ans=0;
    49     scan(a);
    50     f(i,2,a){
    51         ans+=euler[i];
    52     }
    53     pf("%lld",ans);
    54 }
  • 相关阅读:
    XML介绍
    JavaScript基础
    pygame模块参数汇总(python游戏编程)
    CSS3
    CSS( Cascading Style Sheets )简书
    HTML5
    用python进行应用程序自动化测试(uiautomation)
    HTML入门
    Selenium2 (python)
    C#快速入门
  • 原文地址:https://www.cnblogs.com/St-Lovaer/p/11404925.html
Copyright © 2011-2022 走看看