数学知识——欧拉函数

news2024/10/3 4:47:45

数学知识(二)
20240628

  1. 求和N互质的个数公式 先分解N,再求个数fai n
  2. 欧拉函数的证明:用容斥原理 不考
    求质因子 p1, … , pk
    1-N中与N互质的个数, 去掉质因子倍数 是pi的倍数的有N/pi个,但是会有既是p1也是p2…的倍数,那么会重复减,要再加回来(这是高数讲过的)
    个数=N-是一个pi的倍数 + 是两个的pi,pj的倍数- 是三个的pi,pj, pk的倍数+….类推
    奇减偶加

时间复杂度 O(根号n) 主要是分解质因子耗时,所以是根号n
所以是n*根号ai, 大概4-5百万之间!!!

873 欧拉函数

	#include<iostream>
	#include<algorithm>
	
	using namespace std;
	
	int main(){
	    // 分解质因数
	    int n;
	    cin >> n;
	    while(n --){
	        int a;
	        cin >> a;
	        
	        int res = a; //质因数个数
	        
	        for(int i = 2; i <= a/i; i ++){
	            if(a % i == 0){
	                // res = res *(1- 1 / i); //不能有小数  要先除i
	                res = res / i *(i -1);
	                
	                while(a % i ==0) a /= i;
	            }
	        }
	        
	        // a只有一个最大的质因子他自己
	        if(a > 1) res = res/ a * (a -1);
	        cout << res << endl;
	    }
	    
	    return 0;
	}

874 用筛法求欧拉函数
20:49
求每个质因数的欧拉函数
用On,变快!

一个质数p的欧拉函数(1-p里和p互质的数的个数!)就是p-1

原始

#include<iostream>
#include<algorithm>

using namespace std;

typedef long long LL;
const int N =1000010;

int primes[N], cnt;  //cnt 质数的下标??
int phi[N]; //欧拉函数
bool st[N]; //已被晒过了嘛

// 能爆int 用longlong
LL get_eulers(int n){
    // 线性筛法
    for(int i = 2; i <= n; i ++){
        if(!st[i]){
            // i没被筛过,是个质数
            primes[cnt ++] = i;
        }
        
        // 枚举所有质数,把质数的倍数都删了 标记为筛过
      

一个质数p的欧拉函数(1-p里和p互质的数的个数!)就是p-1 

  for(int j = 0; primes[j] <= n/i; j ++){
            st[primes[j] * i ] = true;
            if(i % primes == 0) break;
        }
    }
}

int main(){
    int n;
    cin >> n;
    
    cout << get_eulers(n) << endl;
    
    return 0;
}

优化
1. 一个质数p的欧拉函数(1-p里和p互质的数的个数!)就是p-1 Phi[i] = I -1
2. I mod pj =0 则pj是i的质因子,
那么phi[pj*i] 的欧拉函数 互质个数= ?

因为欧拉函数和pk的次数ak无关,只和pk 有关,出现一个pk,多乘1-1/pk

推出pj是i质因子,那么 phi[i] 已经乘过 1- 1/pj
那么pj *i的质因子 是1-1/pj不影响,与pj的次数无关!!!!

Phi[pj*i] = pj * phi[i]
当I mod pj =0

当I mod pj !=0
pj一定不是i的质因子,而且是pj i 的最小质因子
多1-1/pj 和pj
Phi[pj
i] = pj (1-1/j)* phi[i] = (pj -1) & phi[i]

就是比线性筛模板多了黄色的部分 三种情况

	#include<iostream>
	#include<algorithm>
	
	using namespace std;
	
	typedef long long LL;
	const int N =1000010;
	
	int primes[N], cnt;  //cnt 质数的下标??
	int phi[N]; //欧拉函数
	bool st[N]; //已被晒过了嘛
	
	// 能爆int 用longlong
	LL get_eulers(int n)
	{
	    phi[1] = 1; //特殊
	    
	    // 线性筛法
	    for(int i = 2; i <= n; i ++){
	        if(!st[i]){
	            // 优化了这里
	            phi[i] = i - 1;
	            
	            // i没被筛过,是个质数
	            primes[cnt ++] = i;
	        }
	        
	        // 枚举所有质数,把质数的倍数都删了 标记为筛过
	        for(int j = 0; primes[j] <= n/i; j ++){
	            st[primes[j] * i ] = true;
	            if(i % primes[j] == 0) 
	            {   
	                phi[primes[j] * i] = phi[i] * primes[j];
	                break;
	            }
	            
	            phi[primes[j] *i] = phi[i] * (primes[j] -1);
	        }
	    }
	    
	    LL res = 0;
	    for(int i = 1; i <= n; i++){
	        res += phi[i];
	    }
	    return res;
	}
	
	int main(){
	    int n;
	    cin >> n;
	    
	    cout << get_eulers(n) << endl;
	    
	    return 0;
	}

36;34 欧拉定理 反正不考证明的,不用看
三 是恒等于

If a与n互质,那么a^phi[n] mod n 恒为1
推论:欧拉定理等价版本
当p质数,if a与p互质
a^phi( p) mod p = 1
则phi( p) = p-1

证明不用看 跳了

费马小定理,高数下
设1-n中所有与a互质的数是 两两不相同
a1, …. , a_phi(n)
因为a与n互质
So
aa1, … , a a_phi(n)两两不相同,而且与n互质
Why 两两不相同 反证法
假设存在两个相同的
aai 三 aaj
a*(ai -aj) 三 0 mod n
因为a不为0, 所以ai 恒等于aj矛盾了

所以
[ a1, …. , a_phi(n) ] mod n
[aa1, … , a a_phi(n) ] mod n是同一组数,只不过顺序不同

所以 a^phi n mod n三 1
在这里插入图片描述

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

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

相关文章

【UE5.1】Chaos物理系统基础——01 创建可被破坏的物体

目录 步骤 一、通过笔刷创建静态网格体 二、破裂静态网格体 三、“统一” 多层级破裂 四、“簇” 群集化的破裂 五、几何体集的材质 六、防止几何体集自动破碎 步骤 一、通过笔刷创建静态网格体 1. 可以在Quixel Bridge中下载两个纹理&#xff0c;用于表示石块的内外纹…

微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

微信小程序-插槽slot

一.插槽slot 在页面使用自定义组件的时候&#xff0c;如果在自定义组件里面写子组件&#xff0c;子组件的内容无法显示。 <custom01> <text slotslot-top>你好&#xff0c;上方组件</text> 你好&#xff0c;组件 <text slotslot-bottom>你好&#xf…

小型语言模型的兴起

过去几年&#xff0c;我们看到人工智能能力呈爆炸式增长&#xff0c;其中很大一部分是由大型语言模型 (LLM) 的进步推动的。GPT-3 等模型包含 1750 亿个参数&#xff0c;已经展示了生成类似人类的文本、回答问题、总结文档等能力。然而&#xff0c;虽然 LLM 的能力令人印象深刻…

文件操作~

目录 1.为什么使用文件&#xff1f; 2.什么是文件&#xff1f; 2.1 程序文件 2.2 数据文件 2.3 文件名 3.⼆进制文件和文本文件&#xff1f; 4.文件的打开和关闭 4.1 流和标准流 4.1.1 流 4.1.2 标准流 4.2 文件指针 4.3 ⽂件的打开和关闭 5.文件的顺序读写 5.1 …

志愿者管理系统带讲解,保运行

技术栈 后端: SpringBoot Mysql MybatisPlus 前端: Vue Element 分为 管理员端 用户端 功能描述 用户端 管理员端 观看地址&#xff1a; B站 &#xff1a; 【毕设者】志愿者管理系统(安装讲解源码)

C++算法学习心得八.动态规划算法(6)

1.最长递增子序列&#xff08;300题&#xff09; 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&…

超详细的 C++中的封装继承和多态的知识总结<2.多态>

引言 小伙伴们我们都知道了&#xff0c;什么是封装和继承&#xff0c;在有了这个的基础上我们接着来看什么是多态。多态从字面上意思我们就可以知道&#xff0c;大概就是一个函数的不同形态&#xff0c;而且&#xff0c;前边我们在学习函数重载的时候我们已经简单的了解了如何用…

如何优化前端性能:提高网页加载速度的实用技巧

我们在前端开发中&#xff0c;性能优化是提高用户体验的关键因素。网页加载速度直接影响用户的满意度和留存率。本文将介绍几种优化前端性能的实用方法&#xff0c;帮助你提高网页加载速度。 问题描述 &#xff1a; 首先前端性能优化涉及多个方面&#xff0c;包括减少HTTP请…

【单片机与嵌入式】stm32串口通信入门

一、串口通信/协议 &#xff08;一&#xff09;串口通信简介 串口通信是一种通过串行传输方式在电子设备之间进行数据交换的通信方式。它通常涉及两条线&#xff08;一条用于发送数据&#xff0c;一条用于接收数据&#xff09;&#xff0c;适用于各种设备&#xff0c;从微控制…

万字长文|下一代系统内存数据加速接口SDXI解读

本文内容分为5章节&#xff0c;总计10535字&#xff0c;内容较多&#xff0c;建议先收藏&#xff01; 1.SDXI技术产生的背景 2.SDXI相比DMA的优势 3.SDXI实现原理与架构 3.1 描述符环原理解读 3.2 上下文管理介绍 3.3 AKey与RKey解读 3.4 错误日志和状态管理 3.5 跨Function访…

javascript 常见设计模式

什么是设计模式? 在软件开发中&#xff0c;设计模式是解决特定问题的经验总结和可复用的解决方案。设计模式可以提高代码的复用性、可维护性和可读性&#xff0c;是提高开发效率的重要手段。 单例模式 1.概念 单例模式 &#xff08;Singleton Pattern&#xff09;&#xf…

c++ 智能指针实战分析

一.智能指针的设计思路 智能指针是类模板&#xff0c;再栈上创建智能指针对象。把普通指针交给智能指针对象。智能指针对象过期时&#xff0c;调用析构函数释放普通指针的内存。 智能指针的类型 auto_ptr是C98的标准&#xff0c;c17已经弃用。unique_ptr、shared_ptr和weak_…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-41目标检测数据集

41目标检测数据集 import os import pandas as pd import torch import torchvision import matplotlib.pylab as plt from d2l import torch as d2l# 数据集下载链接 # http://d2l-data.s3-accelerate.amazonaws.com/banana-detection.zip# 读取数据集 #save def read_data_b…

Mustango——音乐领域知识生成模型探索

Mustango&#xff1a;利用领域知识的音乐生成模型 论文地址&#xff1a;https://arxiv.org/pdf/2311.08355.pdf 源码地址&#xff1a;https://github.com/amaai-lab/mustango 论文题为**“**利用音乐领域知识开发文本到音乐模型’Mustango’”。它利用音乐领域的知识从文本指…

计算机毕业设计Python深度学习美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js

Python美食推荐系统开题报告 一、项目背景与意义 随着互联网和移动技术的飞速发展&#xff0c;人们的生活方式发生了巨大变化&#xff0c;尤其是餐饮行业。在线美食平台如雨后春笋般涌现&#xff0c;为用户提供了丰富的美食选择。然而&#xff0c;如何在海量的餐饮信息中快速…

python 笔试面试八股(自用版~)

1 解释型和编译型语言的区别 解释是翻译一句执行一句&#xff0c;更灵活&#xff0c;eg&#xff1a;python; 解释成机器能理解的指令&#xff0c;而不是二进制码 编译是整个源程序编译成机器可以直接执行的二进制可运行的程序&#xff0c;再运行这个程序 比如c 2 简述下 Pyth…

2.2章节python的变量和常量

在Python中&#xff0c;变量和常量有一些基本的概念和用法&#xff0c;但需要注意的是&#xff0c;Python本身并没有内置的“常量”类型。然而&#xff0c;程序员通常会遵循一种约定&#xff0c;即使用全部大写的变量名来表示常量。 一、变量 在Python中&#xff0c;变量是一…

对不起,AI大模型不是风口

“我们正处在全新起点&#xff0c;这是一个以大模型为核心的人工智能新时代&#xff0c;大模型改变了人工智能&#xff0c;大模型即将改变世界。”——5月26日&#xff0c;百度创始人、董事长兼CEO李彦宏先生在2023中关村论坛发表了《大模型改变世界》演讲。 李彦宏指出&#…

4PCS点云配准算法实现

4PCS点云配准算法的C实现如下&#xff1a; #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/common.h> #include <pcl/common/distances.h> #include <pcl/common/transforms.h> #in…