.欧拉函数.

news2024/12/23 13:28:22

先介绍欧拉函数:
贴一张

证明:

这里利用容斥原理来进行证明:若要求1~N当中与N互质的个数,则应在1~N当中去除N的质因数的倍数,因为既然是因数,那么一定不与N互质,既然是N的因数,那么一定是N的质因数的倍数。对于上述公式里的质因数pi来说,在1~N上pi倍数的个数即为N/pi
那么1~N中与N互质的个数即为:N-N/p1-N/p2-......-N/pi。但是会有质因数的倍数被重复去除,例如6即使质因数2的倍数,也是质因数3 的倍数,那么6就会先被2去除,再被3去除。如下图:

浅蓝色的区域表示被去除两次,那么我们需要将其加回来则上述变为:N-N/p1-N/p2-......-N/pi+N/(p1*p2)+N/(p2*p3)+N/(p1*p3)+......+N/(pi*pj)。

这个时候问题来了深色的区域又被加了三次,那么则需要将其减去,同样的如果是多个质因数的倍数被多次减去,那么就会重复上面的错误
那么1~N中与N互质的个数即为:N-N/p1-N/p2-......+N/(p1*p2)+N/(p2*p3)+...-N/(p1*p2*p3)-......+1/(p1*p2*p3*p4)+.....
而这个推导的公式就等于
证毕。

 理解了上述证明公式,那么求解相关问题就会非常简单

题目:873. 欧拉函数 - AcWing题库

代码:

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

const int N=105;
int n,res[N];

void get_primes(int u)
{
    int cnt=0;
    //试除法求约数
    for(int i=2;i<=u/i;i++)
    {
        while(u%i==0)
        {
            u/=i;
            res[cnt]=i;
            cnt++;
            //以免多次储存。譬如8=2^3,如果不去重则会有:res[0]=2,res[1]=2,res[2]=2;
            if(u%i==0) cnt--;
        }
    }
    
    if(u>1) res[cnt]=u;
}

void euler(int a[],int u)
{
    //记得开long long
    int ans=u;
    for(int i=0;a[i]!=0;i++)
    {
//欧拉公式
        ans=ans/a[i]*(a[i]-1);
    }
    cout << ans << endl;
}

int main()
{
    cin >> n;
    for(int i=0;i<n;i++)
    {
        int x;
        cin >> x;
        get_primes(x);
        euler(res,x);
        //每次计算完成一个数,就将res重置,以免与后续冲突
        memset(res,0,sizeof res);
    }
    
    return 0;
}

 题目:874. 筛法求欧拉函数 - AcWing题库

 本题牵涉到两个公式的证明,在代码后会给出。和前面所学的线性筛,请及时回顾

代码:

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

const int N=1e6+10;
int n,phi[N],primes[N],res;
bool st[N];

void get_eulers(int u)
{
//1特殊处理,当N等于1时,与1互质的个数为1
    phi[1]=1;
    for(int i=2;i<=u;i++)
    {
        if(!st[i])
        {
            primes[res++]=i;
//当数x是质数时,那么与x在1~x互质的个数为x-1,譬如2,3,5,7...
            phi[i]=i-1;
        }
        
        for(int j=0;primes[j] <= u/i;j++)
        {
//线性筛,筛去质数的倍数
            st[primes[j]*i]=true;
//公式一与公式二都是对被筛去的数 求欧拉数
            if(i%primes[j]==0)
            {
                phi[i*primes[j]]=primes[j]*phi[i];//公式一
                break;
            }

            phi[i*primes[j]]=(primes[j]-1)*phi[i];//公式二
        }
    }
    long long cnt=0;
    for(int i=1;i<=u;i++) cnt+=phi[i];
    cout << cnt;
}
int main()
{
    cin >> n;
    
    get_eulers(n);
    
    return 0;
}

 公式一,若i%primes[j]==0,则有phi[i*primes[j]]=primes[j]*phi[i];这个因果关系的含义即为:
如果一个数x是N的质因数y的倍数,那么x*y的欧拉函数就为x*(y的欧拉函数)
证明:因为x%y==0,所以y是x的一个因数,又因为y是N的一个质因数(在筛质数的过程中是以质因数来筛的),那么y是x的质因数。根据算术基本定理 在这里,我们假设x=
 

公式二:

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

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

相关文章

初识Laravel(Laravel的项目搭建)

初识Laravel&#xff08;Laravel的项目搭建&#xff09; 一、项目简单搭建&#xff08;laravel&#xff09;1.首先我们确保使用国内的 Composer 加速镜像&#xff08;[加速原理](https://learnku.com/php/wikis/30594)&#xff09;&#xff1a;2.新建一个名为 Laravel 的项目&a…

gfast前端UI:基于Vue3与vue-next-admin适配手机、平板、pc 的后台开源模板

摘要 随着现代软件开发的高效化需求&#xff0c;一个能够快速适应不同设备、简化开发过程的前端模板变得至关重要。gfast前端UI&#xff0c;基于Vue3.x和vue-next-admin&#xff0c;致力于提供这样一个解决方案。本文将深入探讨gfast前端UI的技术栈、设计原则以及它如何适配手机…

(补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式

文章目录 前言一、进制1 逢几进一2 常见进制在java中的表示3 进制中的转换(1)任意进制转十进制(2)十进制转其他进制二、计算机中的存储1 计算机的存储规则(文本数据)(1)ASCII码表(2)编码规则的发展演化2 计算机的存储规则(图片数据)(1)分辨率、像素(2)黑白图与灰度…

Linux 复现Docker NAT网络

Linux 复现Docker NAT网络 docker 网络的构成分为宿主机docker0网桥和为容器创建的veth 对构成。这个默认网络命名空间就是我们登陆后日常使用的命名空间 使用ifconfig命令查看到的就是默认网络命名空间&#xff0c;docker0就是网桥&#xff0c;容器会把docker0当成路由&…

linux nethogs网络监控程序(端口监控、流量监控、上传流量、下载流量、进程监控进程网络)

文章目录 Nethogs 网络监控程序详解1. 引言2. Nethogs 的安装与运行2.1 安装 Nethogs- **Debian/Ubuntu**- **Fedora**- **Arch Linux** 2.2 运行 Nethogs 3. Nethogs 的使用详解3.1 基本界面- **PID**&#xff1a;进程的 ID。- **用户**&#xff1a;运行该进程的用户。- **程序…

【Linux网络】数据链路层【上】{初识数据链路层/以太网/路由表/MAC地址表/ARP表/NAT表}

文章目录 1.初识数据链路层2.认识以太网2.0前导知识以太网帧和MAC帧CMSA/CD以太网的最小帧长限制是64字节IP层和MAC层 2.1以太网帧格式 3.预备知识计算机网络通信以太网和wifi路由表/MAC地址表/ARP表/NAT表/ACL表 用于同一种数据链路节点的两个设备之间进行信息传递。 1.初识数…

美团一面,你碰到过CPU 100%的情况吗?你是怎么处理的?

本文主要分为三部分 分析一下CPU 100%的常见原因 CPU 100%如何排查 回答这个问题的一个参考答案 CPU被打满的常见原因 1. 死循环 在实际工作中&#xff0c;可能每个开发都写过死循环的代码。 死循环有两种&#xff1a; 在 while、for、forEach 循环中的死循环。 无限递…

期末成绩单怎么单独发给家长,这个小工具超简单!

随着期末考试的落幕&#xff0c;老师们再次迎来了成绩处理的高峰期。传统的成绩单分发方式不仅耗时&#xff0c;还容易出错。但如今&#xff0c;有了易查分小程序&#xff0c;这一过程变得简便而高效。 易查分小程序&#xff0c;一个专为教师和家长设计的便捷工具&#xff0c;让…

[ruby on rails]部署时候产生ActiveRecord::PreparedStatementCacheExpired错误的原因及解决方法

一、问题&#xff1a; 有时在 Postgres 上部署 Rails 应用程序时&#xff0c;可能会看到 ActiveRecord::PreparedStatementCacheExpired 错误。仅当在部署中运行迁移时才会发生这种情况。发生这种情况是因为 Rails 利用 Postgres 的缓存准备语句(PreparedStatementCache)功能来…

【Apache Doris】周FAQ集锦:第 10 期

【Apache Doris】周FAQ集锦&#xff1a;第 10 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目&#xff01; 在这个栏目中&#xff0c;每周将筛选社区反馈的热门问题和话题&#xff0c;重点回答并进行深入探讨。旨在为广大用户…

算法力扣刷题记录 四十五【110.平衡二叉树】

前言 二叉树篇继续 记录 四十五【110.平衡二叉树】 一、题目阅读 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,3,3…

【鸿蒙学习笔记】尺寸设置・width・height・size・margin・padding・

官方文档&#xff1a;尺寸设置 目录标题 width&#xff1a;设置组件自身的宽度height&#xff1a;设置组件自身的高度size&#xff1a;设置高宽尺寸margin&#xff1a;设置组件的外边距padding&#xff1a;设置组件的内边距 width&#xff1a;设置组件自身的宽度 参数为Length…

【零基础】学JS之APIS第三天

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

10分钟快速了解神经网络(Neural Networks)

神经网络是深度学习算法的基本构建模块。神经网络是一种机器学习算法&#xff0c;旨在模拟人脑的行为。它由相互连接的节点组成&#xff0c;也称为人工神经元&#xff0c;这些节点组织成层次结构。 Source: victorzhou.com 神经网络与机器学习有何不同&#xff1f; 神经网络是…

电脑资料丢失不用慌,5招教你恢复数据

在数字化时代&#xff0c;电脑资料的安全与完整对我们而言至关重要。然而&#xff0c;生活中总有一些小插曲&#xff0c;如意外删除、系统故障或病毒攻击等&#xff0c;导致电脑上的重要资料消失得无影无踪。面对这种情况&#xff0c;我们往往感到焦虑和无助。今天&#xff0c;…

LabVIEW心电信号自动测试系统

开发了一种基于LabVIEW的心电信号自动测试系统&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现对心电信号的实时采集、分析和自动化测试。系统包括心电信号采集模块、信号处理模块和自动化测试模块&#xff0c;能够高效、准确地完成心电信号的测量与分析。 硬件系统…

在 SwiftUI 中的作用域动画

文章目录 前言简单示例动画视图修饰符使用多个可动画属性使用 ViewBuilder总结 前言 从一开始&#xff0c;动画就是 SwiftUI 最强大的功能之一。你可以在 SwiftUI 中快速构建流畅的动画。唯一的缺点是每当我们需要运行多步动画或将动画范围限定到视图层次结构的特定部分时&…

网络规划设计师教程(第二版) pdf

网络规划设计师教程在网上找了很多都是第一版&#xff0c;没有第二版。 所以去淘宝买了第二版的pdf&#xff0c;与其自己独享不如共享出来&#xff0c;让大家也能看到。 而且这个pdf我已经用WPS扫描件识别过了&#xff0c;可以直接CtrlF搜索关键词&#xff0c;方便查阅。 链接…

股指期货存在的风险有哪些?

股指期货因其标的物的特殊性&#xff0c;其面临的风险类型十分复杂&#xff0c;主要面临的一般风险和特有风险如下&#xff1a; 一般风险 从风险是否可控的角度&#xff0c;可以划分为不可控风险和可控风险&#xff1b;从交易环节可分为代理风险、流动性风险、强制平仓风险&…

linux 安装redis 遇到问题解决方案

1.当下载了redis包时&#xff08;version&#xff1a;6.0.6&#xff09; 进入解压后的redis目录&#xff08;这里采用tar包安装&#xff09; 当执行make命令时 如果遇到如下情况&#xff1a; 查看当前服务起的gcc 版本&#xff1a;因为redis需要c编译器编译 gcc -v centos 7 …