zoukankan      html  css  js  c++  java
  • HDU-2824-The Euler function(欧拉函数)

    • 欧拉筛
      Accepted 2824 343MS 24856K 546 B G++
      #include "bits/stdc++.h"
      using namespace std;
      typedef long long LL;
      const int MAXN = 3000005;
      LL euler[MAXN];
      void init() {
          for (int i = 2; i < MAXN; i++) {
              euler[i] = i;
          }
          for (int i = 2; i < MAXN; i++) {
              if (euler[i] == i) {
                  for (int j = i; j < MAXN; j += i) {
                      euler[j] = euler[j] / i * (i - 1);
                  }
              }
          }
          for (int i = 2; i < MAXN; i++) {
              euler[i] += euler[i - 1];
          }
      }
      int main() {
          init();
          int a, b;
          while (~scanf("%d%d", &a, &b)) {
              printf("%lld
      ", euler[b] - euler[a - 1]);
          }
          return 0;
      } 

      只要知道素数筛和欧拉函数看这个代码就很轻松啦。就是模拟素数筛

    • 欧拉函数(求φ(n))
      int euler(int n) {
          int ans = n;
          for (int i = 2; i * i <= n; i++) {
              if (n % i == 0) {
                  ans = ans / i * (i - 1);
                  while (n % i == 0) {
                      n /= i;
                  }
              }    
          }
          if (n != 1) {
              ans = ans / n * (n - 1);
          }
          return ans;
      }

      附一个欧拉函数求法

  • 相关阅读:
    Yii AR Model 查询
    学习进度4
    学习进度三
    个人每日总结7
    个人每日总结6
    个人每日总结5
    个人每日总结4
    个人冲刺承担的任务项目的用户模板和用户场景模板
    个人每日总结3
    个人每日总结2
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10371878.html
Copyright © 2011-2022 走看看