HDU 2824 The Euler function [欧拉函数]

#Description
求区间[a, b]内所有数的欧拉函数之和
#Algorithm
把每个欧拉函数求出来,然后累加,记录前面所有数的和,这样的话会更快,当然,不记录也没有什么关系
#Code

#include <iostream>
#include <cstring>
using namespace std;
const int maxb = 3000009;
__int64 f[maxb] = {0, 1};
void init()
{
  for (int i = 2; i < maxb; i++)
    if (f[i] == 0)
      for (int j = i; j < maxb; j += i)
      {
        if (f[j] == 0) f[j] = j;
        f[j] = (f[j] / i) * (i - 1);
      }
  for (int i = 1; i < maxb; i++)
    f[i] += f[i - 1];
}
int main()
{
  init();
  int a, b;
  while (cin >> a >> b) cout << f[b] - f[a - 1] << endl;
  return 0;
}

猜你喜欢

转载自blog.csdn.net/YYecust/article/details/50813670
今日推荐