一文读懂欧拉函数


欧拉函数φ(N)表示小于或等于N的正整数中与N互质的数的个数。又称φ函数、欧拉商数。


下面介绍欧拉函数的几个性质:





我们根据这几个性质就可以求出欧拉函数。


基本思路是首先置φ(N)=N,然后再枚举素数p,将p的整数倍的欧拉函数φ(kp)进行如下操作。



代码如下:


#include

using namespace std;

const int MAX = 1024;

int N;

int p[MAX], phi[MAX];

int main()

{

    cin >> N;

    for(int i = 1; i <= N; i++) // 初始化

    { p[i] = 1; phi[i] = i; }

    p[1] = 0; // 1不是素数

    for(int i = 2; i <= N; i++) // 筛素数

    {

        if(p[i])

        {

            for(int j = i * i; j <= N; j += i)

            { p[j] = 0; }

        }

    }

    for(int i = 2; i <= N; i++) // 求欧拉函数

    {

        if(p[i])

        {

            for(int j = i; j <= N; j += i) // 处理素因子p[i]

            {

                phi[j] = phi[j] / i * (i - 1); // 先除后乘,防止中间过程超出范围

            }

        }

    }

    cout << "Primes: " << endl;

    for(int i = 1; i <= N; i++)

    { if(p[i]) { cout << i << " "; } }

    cout << endl;

    cout << "Euler Phi Function: " << endl;

    for(int i = 1; i <= N; i++)

    { cout << phi[i] << " "; }

    return 0;

}


以上是关于欧拉函数的求法,对于它的应用,这里暂且介绍一个——求解原根的个数。


对于原根的定义,我们可以这样来叙述:


若存在一个实数a,使得( a^i ) mod N,a∈{1,2,3,⋯,N}的结果各不相同,我们就成实数a为N的一个原根。


原根的个数等于φ(φ(N))。这样我们就可以很方便的求出原根的个数。


代码如下:


#include

#include

using namespace std;

typedef unsigned long long ull;

ull N;

ull phi(ull x);

int main()

{

    cin >> N;

    cout << phi(phi(N)) << endl;

    return 0;

}

ull phi(ull x)

{

    ull ans = x;

    ull m = (ull)sqrt(x);

    for(ull i = 2; i <<= m; i++)

    {

        if(x % i == 0) // 求素因子

        {

            ans = ans / i * (i - 1); // 运用通项求解欧拉函数

            while(x % i == 0) // 每个素因子只计算一次

            { x /= i; }

        }

    }

    if(x > 1) // 防质数

    { ans = ans / x * (x - 1); }

    return ans;

}


转自:ivy-end

http://www.ivy-end.com/archives/1021



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 7在工作组模式下管理 Hyper-V

之前在工作组模式下win7来管理server core 下的hyper-v一直不成功&#xff0c;server core下的相应的防火墙端口也已开放但hyper管理器就是无法和hyper-v主机通讯在2008R2下没有问题&#xff0c;现把解决的过程记录下来&#xff0c;以备后查。1、下载Windows 7 远程服务器管理工…

打工就是 “演戏”,你可以认真,但别太当真

这是头哥侃码的第235篇原创时间飞逝&#xff0c;2021年的春节假期已经结束了。在我的记忆中&#xff0c;以前每逢春节的时候&#xff0c;身边的亲戚和朋友们都会非常忙碌&#xff0c;什么聚个餐&#xff0c;串个门呀&#xff0c;什么拜个年&#xff0c;打个牌啦……但从去年开始…

java多线程adb安装apk卡死_多线程方式安装apk

# -*- coding:utf-8 -*-# 1.获取连接设备的机器ip# 2.获取需要安装的apk# 3.对每一台机器安装apk# 4.检查apk安装是否成功# 5.安装完成import os,subprocessimport _thread#获取设备ip地址&#xff0c;并连接result0def connectDevice(dress):检查设别是否连接成功&#xff0c;…

2018年的第一个工作日,推荐几个优质公众号

2017刚过去不久&#xff0c;我们迎来了2018。工作、生活节奏超快的今天&#xff0c;想要不断提升自我&#xff0c;碎片化阅读学习是你最佳的选择&#xff0c;如果你有一颗学习的心&#xff0c;那这些学习型的公众号&#xff0c;绝对会让你受益匪浅。小编为你精选了技术领域几个…

redis session java获取attribute_redis里的数据结构

Redis作为当前使用非常广泛的内存数据库&#xff0c;在代码层面做了很多极致的优化&#xff0c;已获取更好的性能。其中重要的一部分&#xff0c;就是对于底层数据结构的使用。Redis会根据数据量、数据大小等来优化对于不同结构的使用&#xff0c;从而获得更佳的运行效率和内存…

.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记

2.8 安全认证 VS 授权ASP .NET Core 认证授权中间件认证JWT 认证授权认证 VS 授权认证是一个识别用户是谁的过程授权是一个决定用户可以干什么的过程401 Unauthorized 未授权403 Forbidden 禁止访问ASP .NET Core 认证授权中间件在接收到请求之后&#xff0c;认证&#xff08;A…

从Banner入手保护linux系统服务器

一&#xff0c;ftp服务Banner修改法&#xff1a; wu-ftp修改 用十六进制文本编辑器修改/usr/sbin/in.ftpd文件&#xff0c;找到如下几行&#xff1a;/var/log/lastlogCould not write %.100s:%.100sVersion wu-2.6.1-16改成&#xff1a;Microsoft FTP Service(Version.6…

java超长字符序列化_String 字符串最长可以有多长?

Java技术栈www.javastack.cn打开网站看更多文章String 类可以说是在 Java 中使用最频繁的类了&#xff0c;就算是刚刚接触 Java 的初学者也不会陌生&#xff0c;因为对于 Java 程序来说&#xff0c;main 方法就是使用一个 String 类型数组来作为参数的(String[] args)。对于这样…

一文读懂 AVL 树

背景AVL 树是一棵平衡的二叉查找树&#xff0c;于 1962 年&#xff0c;G. M. Adelson-Velsky 和 E. M. Landis 在他们的论文《An algorithm for the organization of information》中发表。所谓的平衡之意&#xff0c;就是树中任意一个结点下左右两个子树的高度差不超过 1。&am…

欧几里得范数_从范数到正则化

范数是一个在数学领域中常用的工具&#xff0c;同时也是学习机器学习原理中经常碰到的概念。本文将从范数的定义出发&#xff0c;逐步带你理解其在机器学习中的应用。首先需要明确的是&#xff0c;范数是一个函数&#xff0c;在机器学习中我们通常用它来衡量向量的大小。 范数定…

C++ 自定义调试信息的输出

自定义调试信息的输出调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug&#xff0c;而守护进程则一般是使用syslog将调试信息输出到日志文件中等等...使用标准的方法打印调试信息有时候不是很…

IdentityServer4之持久化很顺手的事

前言原计划打算在春节期间多分享几篇技术文章的&#xff0c;但到最后一篇也没出&#xff0c;偷懒了吗&#xff1f;算是吧&#xff0c;过程是这样的&#xff1a;每次拿出电脑&#xff0c;在孩姥姥家的院子总有阳光沐浴&#xff0c;看不清屏幕&#xff0c;回屋又有点冷(在强行找理…

java获取下周一整周的日期_获取Java中日期范围内的所有星期五

我最近遇到了一个任务,我必须在一个日期范围内获得所有星期五.我写了一小段代码,很惊讶看到一些奇怪的行为.以下是我的代码&#xff1a;public class Friday {public static void main(String[]args){String start "01/01/2009";String end "12/09/2013"…

手写体识别代码_Python识别图片中的文字

一、前言不知道大家有没有遇到过这样的问题&#xff0c;就是在某个软件或者某个网页里面有一篇文章&#xff0c;你非常喜欢&#xff0c;但是不能复制。或者像百度文档一样&#xff0c;只能复制一部分&#xff0c;这个时候我们就会选择截图保存。但是当我们想用到里面的文字时&a…

递推与储存,是动态规划的关键

小智最近由于项目需要&#xff0c;经常要接触到一些规划类的问题。那今天就给大家讲一讲旅行商问题及其解法吧。旅行商问题&#xff0c;即TSP问题&#xff08;Travelling Salesman Problem&#xff09;。问题是&#xff0c;有一个旅行商人要拜访n个城市&#xff0c;每个城市只能…

SQL 标量值函数的调用

调用 MS SQL 标量值函数&#xff0c;应该在函数前面加上 "dbo."&#xff0c;否则会报 “不是可以识别的 内置函数名称”错误。例如 DECLARE WhichDB TINYINT; SELECT WhichDB dbo. user_GetWhichDB(1);--看看是哪个数据库的 另外&#xff0c;标量值函数就相当于…

dotnet core TargetFramework 解析顺序探索

dotnet core TargetFramework 解析顺序测试Intro现在 dotnet 的 TargetFramework 越来越多&#xff0c;抛开 .NET Framework 不谈&#xff0c;如果一个类库支持多个 TargetFramework 应用实际运行的时候会使用哪个版本的 API 呢&#xff0c;之前一直都是想当然的自以为是了&…

java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

转载请注明出处&#xff1a;http://blog.csdn.net/xdz78#include #include //查找单链表中的特定元素&#xff0c;《数据结构与算法——c语言描述》 3.11 答案int count;//全局变量自动初始化为0int m;//需要查找的元素大小typedef struct student {int data;struct student *n…

python调用robotframework_robotframework+python接口自动化的点滴记录(2)

1.在循环体内&#xff0c;赋值语句的前后名称不能一样&#xff0c;否则在跑循环的第二次时就会报错&#xff1a;TypeError: not all arguments converted during string formatting这样写是错的&#xff1a;${设置计划接口_请求body} string format ${设置计划接口_请求body}…

这种感觉真爽

今天接到客户的修改需求&#xff0c;说了一大段话&#xff0c;然后我们开始讨论解决方案。最后自己来负责前台的修改。看了六七个小时的代码&#xff0c;最后修改了一行。达到了要求。想起了以前课文中学到的一句话&#xff1a;画一条线1美元&#xff0c;知道在哪里画这条线999…