首页 > 其他分享 >欧拉函数

欧拉函数

时间:2024-04-30 17:01:01浏览次数:22  
标签:phi 20 函数 int vis 互质 欧拉

欧拉函数

\(phi_x\) 表示 \(1\) 到 \(x\) 中的所有与 \(x\) 互质的数字数量

性质:

  • x为质数时,\(phi_x = x - 1\),\(phi_{x^2} = p ^ 2 - p\),…… \(phi_{x^k} = p ^ k - p ^ {k - 1} = (p - 1) \times p ^ {k - 1}\)
  • 当 \(a, b\) 互质时,\(phi_{a \times b} = phi_a * phi_b\)

做法:

F1:

适用点:数据规模大,数组存不下
直接枚举 \(x\) 的每一个因子,暴力 \(O(\sqrt{x})\)

int val(int x) {
  int tmp = 1;
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0) {
      tmp *= (i - 1);
      x /= i;
      while (x % i == 0) {
      tmp *= i;
      x /= i;
      }
    }
  }
  if (x != 1) {
    tmp *= (x - 1);
  }
  return tmp;
}

F2:

适用点:多次数据
在欧拉筛中处理

cin >> n;
phi[1] = 1;
for (int i = 2; i < N; i++) {
  if (!vis[i]) {
    p.push_back(i);
    phi[i] = i - 1;
  }
  for (auto j : p) {
    if (j * i >= N) {
      break;
    }
    vis[i * j] = true;
    if (i % j == 0) {
      phi[i * j] = phi[i] * j;
      break; 
    }
    phi[i * j] = phi[i] * (j - 1);
  }
}

整数分块

当你要求 \(\sum\limits_{i=1}^{n} n \div i\)
你可以发现:
\(20\div1 = 20\)
\(20\div2 = 10\)
\(20\div3 = 6\)
\(20\div4 = 5\)
\(20\div5 = 4\)
\(20\div6 = 3\)
\(20\div7 = 2\)
\(20\div8 = 2\)
\(20\div9 = 2\)
\(20\div10 = 2\)
\(20\div11 = 1\)
\(20\div12 = 1\)
\(20\div13 = 1\)
\(20\div14 = 1\)
\(20\div15 = 1\)
\(20\div16 = 1\)
\(20\div17 = 1\)
\(20\div18 = 1\)
\(20\div19 = 1\)
\(20\div20 = 1\)
显然,有许多重复的值,代码:

for (int l = 1, r = 1; r <= n && l <= n; l = r + 1) {
    r = n / (n / l);
    ans += (r - l + 1) * (n / l);
 }

标签:phi,20,函数,int,vis,互质,欧拉
From: https://www.cnblogs.com/libohan/p/18168336

相关文章

  • JavaScript函数
    JavaScript函数函数就是一些功能或语句的封装。在需要的时候,通过调用的形式,执行这些语句。函数也是一个对象函数定义我们使用function关键字定义函数,中文含义是“函数”、“功能”。可以使用如下方式进行定义。函数声明使用函数声明来创建一个函数。语法:function函数名([形......
  • python匿名函数、内置函数以及各类高阶函数等
    【一】匿名函数【1】函数的分类#【1】正规函数deflogin():...login()#【2】匿名函数(无名函数)#语法:lambda参数:表达式#lambda:匿名函数的关键字#参数可以放位置参数以及关键字参数...#表达式:其实本质上是返回值【2】定义匿名函数Python使用lamb......
  • 2020-2021 ICPC NERC (NEERC), North-Western Russia Regional Contest (Northern Sub
    E-EasyCompare-and-Set题意给定n个条件,如果存在一个合法序列使得这n个判断条件成立,则输出Yes和这个合法序列,否则输出No。分析首先可以发现对于\(w_i=0\)的操作我们可以在处理完\(w_i=1\)的操作之后讨论一下即可。发现\(a_i\)和\(b_i\)很大需要对其进行离散化操作。离......
  • Go语言系列——自定义错误、panic和recover、函数是一等公民(头等函数)、反射、读取文件
    文章目录31-自定义错误使用New函数创建自定义错误使用Errorf给错误添加更多信息使用结构体类型和字段提供错误的更多信息使用结构体类型的方法来提供错误的更多信息32-panic和recover什么是panic?什么时候应该使用panic?panic示例发生panic时的deferrecoverpanic,re......
  • Go语言系列——数组和切片、可变参数函数、Maps、字符串、指针、结构体、方法、接口(一
    文章目录11-数组和切片数组数组的声明数组是值类型数组的长度使用range迭代数组多维数组切片创建一个切片切片的修改切片的长度和容量使用make创建一个切片追加切片元素切片的函数传递多维切片内存优化12-可变参数函数什么是可变参数函数语法通过一些例子理解可变参......
  • TypeScript入门1:注释、变量常量、数据类型、函数
    console.log('hits');//声明变量leta:number=10;//声明常量constb:number=20;//类型推断:如果⼀个变量或常量的声明包含了初始值,TS便可以根据初始值进⾏类型推断,此时可以不显式指定其类型letc=60;console.log(typeofc);//number//数字类型:整数和浮点......
  • stm32F07 HAL 库 通过定时器方式实现呼吸灯 自定义呼吸灯函数 (以参数方式设置io
    效果: 1、通过Stm32CubMX开启定时器、设置对应的io口,然后生成工程STM32CubeMX|STM32HAL库方式的微秒延时函数  2、自定义呼吸灯函数代码://呼吸灯函数//GPIO_TypeDef*GPIOx:GPIO组(A-G)//uint16_tGPIO_Pin:IO口(GPIO_Pin_0--GPIO_Pin_16)//......
  • 浅析OpenCV分水岭变换watershed函数的markers参数[C++]
    0.前言本文是笔者在学习C++OpenCV库时学习心得,在学习分水岭变换函数时,由于缺少相关学习资料,导致笔者理解吃力,故写此文章阐述一下对该函数的理解,希望对其他学习人士提供帮助。本文主要介绍了watershed函数参数以及参数实际表示。请您按文章次序阅读。您需要提前了解的相关知......
  • 【C语言】---- for循环函数
    在C语言中,for循环是一种常用的循环结构,用于重复执行一段代码多次。for循环提供了一种简洁而灵活的方式来实现循环,使程序员能够更有效地编写和管理代码。for循环的语法for循环的基本语法如下:for(初始化表达式;循环条件;更新表达式){//循环体}其中:初始化表达......
  • hyperf文件上传和url函数
    2024年4月29日11:24:35配置静态资源如果您希望Swoole来管理静态资源,请在config/autoload/server.php配置中增加以下配置。return['settings'=>[...//静态资源'document_root'=>BASE_PATH.'/public','enable_sta......