【算法】数论---欧拉函数

什么是欧拉函数?

对于正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目,记作φ(n)

φ(1)=1

当m,n互质时,φ(mn)=φ(m)∗φ(n)

 


一、求一个正整数的欧拉函数---(先对它分解质因数,然后套公式)

int x; cin>>x;
int ans=x;map<int,int>h;
for(int i=2;i<=x/i;i++)
{while(x%i==0){x/=i;h[i]++;}
}
if(x>1)h[x]++;for(auto i:h)
{int j=i.first;  //因为j最大不超过2x10^9,所有j的数据类型用int就足够了ans=ans/j*(j-1);  //因为每个j都是ans的质因子,所有ans/j肯定可以整除的,并且因为ans/j*(j-1)的结果肯定会小于ans,所有ans的数据类型用int就足够了
}//这里必须得是ans/j*(j-1)这个顺序,防止爆intcout<<ans<<endl;

二、求一个正整数的欧拉函数---线性筛法

#include<iostream>
using namespace std;const int N=1000010;int primes[N],idx=0;bool st[N];int ou[N];int main()
{int n; cin>>n;for(int i=2;i<=n;i++){if(!st[i]){primes[idx++]=i;ou[i]=i-1;}for(int j=0;primes[j]*i<=n;j++){st[primes[j]*i]=true;  //primes[j]*i将会遍历所有的和数,然后在这里将它们标记(筛掉),再在下面将它们的欧拉函数求出if(i%primes[j]==0)  //i%primes[j]==0说明primes[j]是i的最小质因数{ou[primes[j]*i]=ou[i]*primes[j];break;}else  //i%primes[j]!=0说明primes[j]是比i的最小质因数还要小的质数{ou[primes[j]*i]=ou[i]*primes[j]/primes[j]*(primes[j]-1);}}}ou[1]=1;long long ans=0;for(int i=1;i<=n;i++)ans+=ou[i];cout<<ans;return 0;
}

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

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

相关文章

window 服务使用powershell 调用office进行文档内存不够的处理

在项目中为了实现office文件的预览&#xff0c;专门做了个service进行文件的定时转换。 在测试时发现&#xff0c;服务程序 双击执行的时候&#xff0c;文件的转换一切正常&#xff0c;但是当把服务程序安装为服务的时候吗&#xff0c;就会出现如下错误&#xff1a; $PowerPo…

vue3框架笔记

Vue Vue 是一个渐进式的前端开发框架&#xff0c;很容易上手。Vue 目前的版本是 3.x&#xff0c;但是公司中也有很多使用的是 Vue2。Vue3 的 API 可以向下兼容 2&#xff0c;Vue3 中新增了很多新的写法。我们课程主要以 Vue3 为主 官网 我们学习 Vue 需要转变思想&#xff0…

插入排序 InsertionSort

插入排序的原理是默认前面的元素都是已经排序好的&#xff0c;然后从后面逐个读取插入到前面排序好的合适的位置&#xff0c;就相当于打扑克的时候每获取一张牌的时候就插入到合适的位置一样。 以{26,53,48,11,13,48,32,15)为例&#xff0c;插入排序的过程如下所示: 动态演示 …

RHCE9学习指南 第13章 硬盘管理

新的硬盘首先需要对硬盘进行分区和格式化&#xff0c;首先了解一下硬盘的结构&#xff0c;如图13-1所示。 图13-1 磁盘上的磁道和扇区 硬盘的磁盘上有一个个的圈&#xff0c;每两个圈组成一个磁道。从中间往外发射线&#xff0c;把每个磁道分成一个个的扇区&#xff0c;每个扇…

Java 动态树的实现思路分析

Java 动态树的实现 目录概述需求&#xff1a; 设计思路实现思路分析1. 简单Java实现&#xff1a;2.建立父子表存储3.前端的对应的json 字符串方式 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0…

Linux基础知识学习3

vim编辑器 其分为四种模式 1.普通(命令)模式 2.编辑模式 3.底栏模式 4.可视化模式 vim编辑器被称为编辑器之神&#xff0c;而Emacs更是神之编辑器 普通模式&#xff1a; 1.光标移动 ^ 移动到行首 w 跳到下一个单词的开头…

SpringBoot 一个注解实现数据脱敏

什么是数据脱敏 数据脱敏是指对某些敏感信息&#xff0c;例如姓名、身份证号码、手机号、固定电话、银行卡号、邮箱等个人信息&#xff0c;通过脱敏算法进行数据变形&#xff0c;以保护敏感隐私数据。 数据脱敏通常涉及以下几种主要方法&#xff1a; 替换&#xff1a; 将原始…

安装Hadoop:Hadoop的单机模式、伪分布式模式——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项

前言 Hadoop包括三种安装模式&#xff1a; 单机模式&#xff1a;只在一台机器上运行&#xff0c;存储是采用本地文件系统&#xff0c;没有采用分布式文件系统HDFS&#xff1b;伪分布式模式&#xff1a;存储采用分布式文件系统HDFS&#xff0c;但是&#xff0c;HDFS的名称节点…

【实用工具】vim常用命令

快速移动(上下左右箭头可替代) 左移 h 右移 l 下移 j 上移 K在本行操作 0 移动到本行行首 ^ 移动到本行的第一个不是 blank 字符 $ 移动到本行行尾 w 光标移动到下一个单词的开头 e 光标移动到下一个单词的结尾跨行移动光标 nG 光标定位到第n行的行首 gg 光标定位到第一行的…

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)

文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…

「年终总结」生成人工智能的奇妙年份

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

java springboot将接口查询数据放在系统中 一小时系统更新一次 避免用户访问接口查询数据库缓慢

真到了公司 很多数据库表 特别是常用的功能业务对应的 都是几百万条起步的数据 查询会比较缓慢 那么 我们就可以不用每次都真的查询数据库 例如 我这里有一个接口 通过 封装的 IBookService.list 函数去查询数据库 接口返回是这样的 我们先在启动类 条件装配上 这个接口所在的…