博客
关于我
poj2478欧拉函数
阅读量:794 次
发布时间:2023-03-03

本文共 1475 字,大约阅读时间需要 4 分钟。

欧拉函数求和问题

问题描述

计算从2到n的欧拉函数和,即计算欧拉函数φ(2) + φ(3) + ... + φ(n)。

方法思路

欧拉函数φ(n)表示小于n且与n互质的正整数的个数。我们需要对每个数i从2到n计算其欧拉函数值,并将这些值累加。

具体步骤如下:

  • 初始化一个数组euler,用于存储每个数的欧拉函数值。
  • euler[1] = 1,因为1的欧拉函数值为1。
  • 遍历从2到n的每个数i:
    • 如果i不是质数(即euler[i]已被初始化),则继续。
    • 如果i是质数,则对其所有的倍数j进行处理:
      • 如果j不是质数(即euler[j]已被初始化),则跳过。
      • 否则,euler[j] = j * (1 - 1/p),其中p是j的质因数。
  • 代码实现

    #include #include 
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #define C 0.5772156649#define pi acos(-1.0)#define ll long long#define mod 1000000007#define ls l, m, rt << 1#define rs m + 1, r, rt << 1#pragma comment(linker, "/STACK:1024000000,1024000000")using namespace std;const double g = 10.0, eps = 1e-12;const int N = 1000000 + 10, maxn = 500 + 100, inf = 0x3f3f3f;ll euler[N];void geteuler() { memset(euler, 0, sizeof(euler)); euler[1] = 1; for (int i = 2; i < N; ++i) { if (!euler[i]) { for (int j = i; j < N; j += i) { if (!euler[j]) { euler[j] = j; } euler[j] *= (1 - 1.0 / i); } } }}int main() { ios::sync_with_stdio(false); cin.tie(0); geteuler(); ll n; while (cin >> n) { ll ans = 0; for (ll i = 2; i <= n; ++i) { ans += euler[i]; } cout << ans << endl; }}

    代码解释

  • 初始化数组:euler数组用于存储每个数的欧拉函数值,初始时全为0。
  • 设置初始值:euler[1] = 1,因为1与自身互质,且没有其他因数。
  • 遍历每个数:从2到N-1依次处理每个数i。
  • 处理质数:如果i不是质数(即euler[i]已被初始化),则继续。
  • 计算欧拉函数:对于质数i,遍历其所有倍数j,计算euler[j] = j * (1 - 1/p),其中p是j的质因数。
  • 输出结果:读取输入的n,计算从2到n的欧拉函数和并输出结果。
  • 这个方法通过筛法高效地计算欧拉函数和,适用于较大的n值。

    转载地址:http://odxfk.baihongyu.com/

    你可能感兴趣的文章
    php输出数据到csv文件
    查看>>
    php输出语句
    查看>>
    php运行原理详细说明
    查看>>
    php运行环境出现Undefined index 或variable时解决方法
    查看>>
    php进程通信
    查看>>
    R&Python Data Science 系列:数据处理(2)
    查看>>
    php递归算法总结
    查看>>
    PHP递归遍历文件夹
    查看>>
    R&Python Data Science 系列:数据处理(1)
    查看>>
    php错误日志文件
    查看>>
    PHP错误解决:Array and string offset access syntax with curly braces is deprecated
    查看>>
    php隐藏手机号中间4位方法总结
    查看>>
    php面向对象三大特征封装、多态、继承
    查看>>
    php面向对象全攻略
    查看>>
    php面向对象的基础题
    查看>>
    php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结)...
    查看>>
    php页面增加自选项,php-在Woocommerce中添加新的自定义默认订购目录选项
    查看>>
    php页面静态化技术;学习笔记
    查看>>
    php项目心得以及总结
    查看>>
    PHP项目集成支付宝PC端扫码支付API(国内支付)
    查看>>