欧拉函数,欧拉定理,费马小定理介绍及模板

2023-10-05 23:31

本文主要是介绍欧拉函数,欧拉定理,费马小定理介绍及模板,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

欧拉函数的定义:对于正整数 n n ,欧拉函数是小于等于n的数中,与 n n 互质的数的数目

欧拉函数又称ϕ函数,例如 ϕ(8)=4 ϕ ( 8 ) = 4 ,因为1,3,5,7均和8互质

定理:

  1. 如果 n n 为某一个素数p,则: ϕ(p)=p1 ϕ ( p ) = p − 1
  2. 如果 n n 为某一个素数p的幂次 pa p a ,则: ϕ(pa)=(p1)pa1 ϕ ( p a ) = ( p − 1 ) ∗ p a − 1
  3. 如果 n n 为任意两个互质的数a,b的乘积,则: ϕ(ab)=ϕ(a)ϕ(b) ϕ ( a ∗ b ) = ϕ ( a ) ∗ ϕ ( b )
  4. n=pa11pa22...pakk n = p 1 a 1 ∗ p 2 a 2 ∗ . . . ∗ p k a k 为正整数 n n 素数幂分解,那么
    ϕ(n)=n(11p1)(11p2)...(11pk)

    推论: 当 n n 为奇数时,有ϕ(2n)=ϕ(n)

以下是两个常用的定理:

  • 欧拉定理:对于任何两个数值的正整数 a,m a , m (m>=2),有 aϕ(m)1(mod m) a ϕ ( m ) ≡ 1 ( m o d m )
  • 费马小定理: 当 m m 是质数时,am11(mod m)

模板

返回小于等于n且与n互质的数的个数

int euler_phi(int n)  
{  int res = n;  int m = (int)sqrt(n);  for(int i = 2; i <= m; i++)  if(n % i == 0)  {  res = res / i * (i-1);  while(n % i == 0) n /= i;  }  if(n > 1) res = res / n * (n-1);  return res;  
}

筛选法求欧拉函数

void euler_phi()  
{  for(int i = 1; i < N; i++) phi[i] = i;  for(int i = 2; i < N; i++)  if(phi[i] == i) //成立说明i是素数for(int j = i; j < N; j += i) //j要从i开始,这样可以处理素数的情况  phi[j] = phi[j] / i * (i-1);  
}  

这篇关于欧拉函数,欧拉定理,费马小定理介绍及模板的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/152289

相关文章

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st