一文读懂欧拉函数


欧拉函数φ(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;打个牌啦……但从去年开始…

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…

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;在机器学习中我们通常用它来衡量向量的大小。 范数定…

IdentityServer4之持久化很顺手的事

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

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

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

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

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

dotnet core TargetFramework 解析顺序探索

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

大数据时代,掌握数据分析需要做到这几点

这些年来&#xff0c;随着进入大数据时代&#xff0c;各行各业均有一个词频频被提到&#xff0c;那就是数据分析。那么数据分析究竟是什么呢&#xff1f;数据分析就是指用适当的统计分析方法对收集来的大量数据进行处理分析&#xff0c;提取有用信息并形成结论&#xff0c;从而…

93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?

背景在实际项目中redis常被应用于做缓存&#xff0c;分布式锁/消息队列等。但是在搭建配置好redis服务器后很多朋友应该会发现和有这样的疑问&#xff0c;为什么redis默认建立了16个数据库&#xff0c;16个数据库的由来redis是一个字典结构的存储服务器&#xff0c;一个redis实…

“一边熬夜一边求不要猝死”,90后养生朋克指南,条条扎心!

随着一批又一批的90后步入中年秃头、失眠、衰老...健康的压力如影如随是时候开始养生朋克了当代青年&#xff1a;养生朋克指南养生朋克一边作死一边自救的养生方式比如一边熬夜一边涂贵价护肤品用最贵的眼霜 熬最长的夜心理活动经常是&#xff1a;一边熬夜一边祈祷自己不要猝死…

万级 K8S 集群背后,etcd 如何保持稳定性?

这几年&#xff0c;随着 Kubernetes 成为容器编排领域霸主&#xff0c;etcd 越来越火&#xff0c;GitHub star 已超过 34.2K。这与它的应用场景广泛密不可分&#xff0c;从服务发现到分布式锁&#xff0c;从配置存储到分布式协调&#xff0c;可以说&#xff0c;etcd 已成为云原…

qdialog 只有点击才能获得焦点_4 个突破点,让你的 Banner 点击率提升10倍

双 11 刚过&#xff0c;双 12又来了每年这个时候作为一名设计师&#xff0c;真的很难...老板压着做电商 banner还有很多人指指戳戳让你改稿好不容易按照别人的想法过稿结果banner 的点击率还不高其实&#xff0c;只需要稍微调整视觉重点你的电商banner 就会变得变得更吸引人&am…

穿背心的老院士,86岁,重病,还在敲代码,单手!

昨天有幸看到了一个视频&#xff0c;视频中&#xff0c;一位老先生穿着朴素的白背心&#xff0c;伏在桌上&#xff0c;对着电脑&#xff0c;一手按着写满密密麻麻数学公式的本子&#xff0c;另一只手仅用单指吃力又缓慢地按着键盘。老先生全神贯注地研究他是 “背心院士” 高伯…

百度广告点击软件_结束了,百度 “毒瘤” 广告!

“ 通过本文&#xff0c;你可以获取一款上网必备的插件&#xff0c;让你摆脱各种"毒瘤"广告。”大家天天逛网页&#xff0c;最恼人的也就是广告了吧。尤其是百度搜索时。01—毒瘤广告有多愁&#xff1f;百度广告有多可怕&#xff0c;小哥哥给你演示一下。百度搜“智齿…

java跳转画面后画面白了_如何跳转指定页面后再次跳转到另一页面或原来的页面...

c#图解教程第5版数万读者认可的新99.33元(需用券)去购买 >这里可以采用redirect以get形式向指定页面发出get请求&#xff0c;指定页面完成后会再次跳转到redirect后边指定的页面(注意&#xff1a;这里的redirect只是一个自定义参数&#xff0c;并不是自带的&#xff0c;名称…