第十四届蓝桥杯国赛:2023次方的思考(指数塔,数论)

news2025/1/8 4:35:37

在这里插入图片描述

首先我们要知道,正常计算的话,指数优先级最高,因此得先计算指数,比如:
2 3 2 = 512 2^{3^2}=512 232=512
欧拉定理的关键在于,它允许我们通过减少计算的指数大小来简化模运算。

经过仔细研究(看题解的思路),蓝桥杯这个题应该是出错了,这个题的指数叫作:广义高阶幂塔,应当递归求解,而使用欧拉函数的方法不适用,所以现将题目改成:
对 ( ⋅ ⋅ ⋅ ( ( 2 3 ) 4 ) 5 ⋅ ⋅ ⋅ ) 2023 的值对 2023 取模的结果。 对(···((2^3)^4)^5···)^{2023}的值对2023取模的结果。 (⋅⋅⋅((23)4)5⋅⋅⋅)2023的值对2023取模的结果。

1、无脑的想法:

指数模+快速幂(错的)

#include <iostream>
using namespace std;
int main()
{
    int result = 2023;//result 存储 指数
    for(int i = 2022;i >= 2; --i){//遍历底数
        int b = result;
        int a = i;
        int ans = 1;
        while(b){
            if((b & 1) == 1){
                ans = (ans * a) % 2023;
            }
            a = (a * a) % 2023;
            b >>= 1;
        }
        result = ans;
    }
    cout << result;//1259
    return 0;
}

指数并不能直接取模!取模只在四则运算里面好用,在指数里面就不太能直接用了。
2 10 m o d   9 = 1024   m o d   9 = 7 2^{10} mod\ 9 = 1024\ mod\ 9 = 7 210mod 9=1024 mod 9=7 2 10 m o d   9   ≠ 2   m o d   9 = 2 2^{10} mod\ 9\ ≠2\ mod\ 9=2 210mod 9 =2 mod 9=2
可以证明指数不能随便取模。

普通的取模运算只能运用于加减乘除(四则运算) 下面是这些基本算术操作在模运算下的特性:

  1. 加法(Addition):

    • ( a + b ) m o d    n = [ ( a m o d    n ) + ( b m o d    n ) ] m o d    n (a + b) \mod n = [(a \mod n) + (b \mod n)] \mod n (a+b)modn=[(amodn)+(bmodn)]modn
    • 加法的模运算遵循分配律。
  2. 减法(Subtraction):

    • ( a − b ) m o d    n = [ ( a m o d    n ) − ( b m o d    n ) + n ] m o d    n (a - b) \mod n = [(a \mod n) - (b \mod n) + n] \mod n (ab)modn=[(amodn)(bmodn)+n]modn
    • 减法也遵循类似的规则,但要注意结果保持非负
  3. 乘法(Multiplication):

    • ( a × b ) m o d    n = [ ( a m o d    n ) × ( b m o d    n ) ] m o d    n (a \times b) \mod n = [(a \mod n) \times (b \mod n)] \mod n (a×b)modn=[(amodn)×(bmodn)]modn
    • 乘法在模运算中同样遵守分配律。
  4. 除法(Division):

    • 除法在模运算中比较复杂。不能直接应用常规除法运算,需要用到乘法逆元。如果存在, a a a 在模 n n n 下的乘法逆元 a − 1 a^{-1} a1 满足 a a − 1 ≡ 1 m o d    n aa^{-1} \equiv 1 \mod n aa11modn。然后, a / b m o d    n a / b \mod n a/bmodn 可以表示为 a × b − 1 m o d    n a \times b^{-1} \mod n a×b1modn

在处理幂运算(如 a b m o d    n a^b \mod n abmodn)时,不能直接对指数 b b b 应用普通的模运算,除非考虑到适当的数论属性(如欧拉函数 ϕ ( n ) \phi(n) ϕ(n)),这是因为幂运算涉及重复的乘法过程,指数的大小直接影响最终结果。因此,在涉及到幂运算时,需要谨慎处理指数的模运算,通常基于 ϕ ( n ) \phi(n) ϕ(n) 来简化指数大小。


2、有脑但不够的想法

费马小定理(错的)

  • 费马小定理:
    费马小定理: a p − 1 ≡ 1 ( m o d   p )      p 是质数 , g c d ( a , p ) = 1 费马小定理:a^{p-1} ≡ 1(mod\ p)\ \ \ \ p是质数,gcd(a,p)=1 费马小定理:ap11(mod p)    p是质数,gcd(a,p)=1

如果 2023 是质数,则 a 2022 ≡ 1 ( m o d   2023 ) 如果2023是质数,则a^{2022} ≡ 1(mod\ 2023) 如果2023是质数,则a20221(mod 2023)
如果 2023 是质数,则 a 2023 ≡ a ( m o d   2023 ) 如果2023是质数,则a^{2023} ≡ a (mod\ 2023) 如果2023是质数,则a2023a(mod 2023)
由于 a = b 2022 ,且 b 2022 ≡ 1 ( m o d   2023 ) 由于a = b^{2022},且b^{2022} ≡ 1(mod\ 2023) 由于a=b2022,且b20221(mod 2023)
则有, a 2023 ≡ a ≡ 1   ( m o d   2023 ) ,其中 a = 2 3 4 ( ⋅ ⋅ ⋅ ) 2022 则有,a^{2023} ≡ a ≡ 1\ (mod\ 2023),其中a = 2^{3^{4^{(···)^{2022}}}} 则有,a2023a1 (mod 2023),其中a=234(⋅⋅⋅)2022
因此得结果为 1 。 因此得结果为1。 因此得结果为1

错误!因为2023压根不是质数
不过我们需要注意的是,如果是按原题来理解:
而且这样做还存在一个问题,你把a看成一个整体考虑问题了,因为你把底数包裹起来了,然后看最顶层的指数,这就相当于 2 3 2 2^{3^2} 232,把 2 3 2^{3} 23看成一个整体了,这很显然与指数计算的方式相违背!

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int f = sqrt(2023);
    for(int i = 2;i <= f;++i){
        if(2023 % i == 0){
            cout << i << " * " << 2023 / i << " = 2023"<<endl;
        }
    }
    return 0;
}

输出:

7 * 289 = 2023
17 * 119 = 2023

3、正解

欧拉定理 : 数论基础

  • 欧拉定理:
    a ϕ ( n ) ≡   1 ( m o d   n ) , g c d ( a , n ) = 1 a^{\phi(n)} ≡\ 1(mod\ n),gcd(a,n)=1 aϕ(n) 1(mod n),gcd(a,n)=1
    b   =   c ϕ ( n ) + d ,则 a b ≡   a c ϕ ( n ) + d ≡   a d ( m o d   n ) b\ =\ c\phi(n)+d,则a^{b} ≡\ a^{c\phi(n)+d}≡\ a^d(mod\ n) b = cϕ(n)+d,则ab acϕ(n)+d ad(mod n)
    因此 a b ≡   a b   m o d   ϕ ( n ) ( m o d   n ) a^{b} ≡\ a^{b\ mod\ \phi(n)}(mod\ n) ab ab mod ϕ(n)(mod n)

因此使用欧拉定理可以“模”去一部分指数。

因此由于本题的底数是 2 2 2 2 2 2的任意次幂都和 2023 2023 2023互质,所以满足欧拉定理。本题最外层可以认为是 x 2023 ≡   x 2023   m o d   ϕ ( 2023 ) ( m o d   2023 ) x^{2023}≡\ x^{2023\ mod\ \phi(2023)}(mod\ 2023) x2023 x2023 mod ϕ(2023)(mod 2023)

  • 欧拉函数的计算方式:
    在这里插入图片描述
    其中 p i p_i pi n n n的所有质因数,计算方式应该是 ϕ ( n ) = n × ∏ i = 1 S ( p i − 1 p i ) \phi(n)=n×\prod_{i=1}^{S}(\frac{p_i-1}{p_i}) ϕ(n)=n×i=1S(pipi1)

根据上述不过我们需要注意的是,如果是按原题来理解:
令计算的指数塔是 2 a   m o d   2023 2^a\ mod\ 2023 2a mod 2023,则结果为 2 a   m o d   ϕ ( 2023 ) m o d 2023 2^{a\ mod\ \phi(2023)} mod 2023 2a mod ϕ(2023)mod2023,也就是 2 a   m o d   1632   m o d   2023 2^{a\ mod\ 1632}\ mod\ 2023 2a mod 1632 mod 2023,那么接下来需要知道 a   m o d   1632 a\ mod\ 1632 a mod 1632的大小,但指数塔 a = 3 b a = 3^b a=3b,此时计算的指数塔是 3 b   m o d   1632 3^b\ mod\ 1632 3b mod 1632,接下来 b   m o d   ϕ ( 1632 ) b\ mod\ \phi(1632) b mod ϕ(1632)

好好好,这样不一定互质了,所以问题太大了。

正确的解法:

#include<bits/stdc++.h>
using namespace std;
#define int long long

//欧拉函数 
int get_eular(int n){
    int phi=n;
    for(int i=2;i<=n/i;i++){
        if(n%i)    continue;
        while(n%i==0)    n/=i;
        phi=phi/i*(i-1);
    }
    if(n>1)    phi=phi/n*(n-1);
    return phi;
} 

//快速幂
int quick(int base, int x, int mod){
    int res=1;
    while(x){
        if(x&1)    res=res*base%mod;
        base=base*base%mod;
        x>>=1;
    }
    return res;
} 

signed main(){
    int a=get_eular(2023); 
    int t=2023; 
    for(int i=2022;i>=3;i--){
        t=quick(i,t,a);
    };
    t=quick(2,t,2023);
    cout<<t<<endl;    
    return 0;
}

究其原因,我是真没想清楚。

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

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

相关文章

设计模式之代理模式ProxyPattern(六)

一、代理模式介绍 1、什么是代理模式&#xff1f; 代理模式是一种结构型设计模式&#xff0c;它允许为其他对象提供一个替代品或占位符&#xff0c;以控制对这个对象的访问。 2、代理模式的角色构成 抽象主题&#xff08;Subject&#xff09;&#xff1a;定义了真实主题和代…

【算法】【单调栈】【leetcode】1019. 链表中的下一个更大节点

刷这题之前先看&#xff1a; 【算法】【OD算法】【单调栈】找朋友-CSDN博客 【算法】【单调栈】【leetcode】1475. 商品折扣后的最终价格-CSDN博客 【算法】【单调栈】【leetcode】901. 股票价格跨度-CSDN博客 【算法】【单调栈】每日温度-CSDN博客 题目地址&#xff1…

机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

【介绍下Unity编辑器扩展】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

学习 Rust 第 23 天:闭包

Rust 闭包提供了简洁、富有表现力的匿名函数来捕获周围的变量。它们简化了代码&#xff0c;提供了存储、参数传递和函数重构方面的灵活性。它们与泛型的交互增强了灵活性&#xff0c;而捕获模式则促进了有效的所有权和可变性管理。从本质上讲&#xff0c;闭包是 Rust 的基础&am…

笔记-用Python脚本启停JAR程序

用Python脚本启停JAR程序&#xff0c;需要用到python中的以下内置模块 subprocess 是 Python 的一个标准库模块&#xff0c;用于在新进程中执行子命令&#xff0c;获取子进程的输入/输出/错误以及返回码等os 是 Python 的一个标准库模块&#xff0c;它提供了与操作系统交互的功…

【web安全】-- 命令执行漏洞详解

本文将从原理开始介绍命令执行漏洞并附有三个实例来供各位客官学习 文章目录 一、什么是命令执行漏洞二、出现的原因三、有可能存在命令执行漏洞的函数&#xff08;php&#xff09;1、利用一些函数来实现命令执行2、直接执行系统命令的函数 四、命令拼接符号1、Windows2、linux…

【Mac】mac 安装 prometheus 报错 prometheus: prometheus: cannot execute binary file

1、官网下载 Download | Prometheus 这里下载的是prometheus-2.51.2.linux-amd64.tar.gz 2、现象 解压之后启动Prometheus 启动脚本&#xff1a; nohup ./prometheus --config.fileprometheus.yml > prometheus.out 2>&1 & prometheus.out日志文件&#xff…

opencv基础篇 ——(十)非真实感渲染

非真实感渲染&#xff08;Non-Photorealistic Rendering, NPR&#xff09;是指通过一系列图像处理技术&#xff0c;将真实感图像转换为具有特定艺术风格或视觉效果的图像&#xff0c;模拟绘画、素描、卡通等非现实主义表现手法。OpenCV 提供了一些内置函数来实现非真实感渲染&a…

医疗大模型华佗GPT-2:医学问答超越GPT-4,通过2023年国家执业药师考试

前言 随着人工智能技术的快速发展&#xff0c;特别是在自然语言处理(NLP)领域&#xff0c;大型预训练模型如GPT系列已经显示出在多个领域的强大应用潜力。最近&#xff0c;华佗GPT-2医疗大模型的发布&#xff0c;不仅标志着人工智能在医学领域的一大进步&#xff0c;更是在202…

Linux IP Forwarding路由转发实验

linux 路由转发功能 Linux 操作系统具备路由转发功能&#xff0c;路由功能是指 Linux 操作系统提供的路由管理和转发功能&#xff0c;它允许 Linux 主机在网络中正确地转发数据包&#xff0c;并确保数据包能够达到其目的地。 出于安全考虑&#xff0c;Linux系统默认是禁止数据…

vscode 检查更新 没有检查更新按钮

vscode 检查更新 没有检查更新按钮 1、问题描述2、问题分析3、解决方法 1、问题描述 今天在使用vscode写markdown文档时&#xff0c;需要粘贴图片到markdown文档中&#xff0c;结果无法粘贴进来&#xff0c;显示如下&#xff1a;只粘贴了image.png这几个字。 2、问题分析 搜索…

交通运输智慧监管平台---强化物流安全与效率的新举措

一、建设背景 随着社会对于交通安全和环境保护的要求不断提高&#xff0c;对卡车运输的监管和合规性要求也逐渐加强。为了满足快速发展的物流需求&#xff0c;提高供应链协同和可追溯性、解决安全问题、提高运输效率和降低成本&#xff0c;我们利用现代技术和信息化手段着力建设…

QT - 创建Qt Widgets Application项目

在Qt中结合OpenGL使用&#xff0c;可以创建一个Qt Widgets应用程序项目。在创建项目时&#xff0c;您可以选择使用OpenGL模板来生成一个已经集成了OpenGL的项目。这个模板会自动帮助您集成OpenGL和Qt&#xff0c;并生成一个基本的OpenGL窗口。您可以在这个窗口中进行OpenGL的开…

搭建大型分布式服务(三十七)SpringBoot 整合多个kafka数据源-取消限定符

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

Spark SQL编程初级实践

参考链接 Spark编程: Spark SQL基本操作 2020.11.01_df.agg("age"->"avg")-CSDN博客 RDD编程初级实践-CSDN博客 Spark和Hadoop的安装-CSDN博客 1. Spark SQL基本操作 { "id":1 , "name":" Ella" , "age":…

深入理解正则表达式:从入门到精通

title: 深入理解正则表达式&#xff1a;从入门到精通 date: 2024/4/30 18:37:21 updated: 2024/4/30 18:37:21 tags: 正则Python文本分析日志挖掘数据清洗模式匹配工具推荐 第一章&#xff1a;正则表达式入门 介绍正则表达式的基本概念和语法 正则表达式是一种用于描述字符串…

Docker安装Nginx端口映射|挂载目录查看

文章目录 前言Docker安装nginx怎么查看端口映射|挂载映射 前言 Docker 的作用主要体现在应用隔离、跨平台部署、快速部署、环境一致性以及资源隔离和管理等方面&#xff0c;为软件开发和运维带来了很多便利和优势。 在服务器&#xff08;虚拟机&#xff09;中安装 Nginx、MyS…

从源头上减少BUG:掌握Java中的label和assert语句!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【分享】如何将word格式文档转化为PDF格式

在日常的办公和学习中&#xff0c;我们经常需要将Word文档转换为PDF格式。PDF作为一种通用的文件格式&#xff0c;具有跨平台、易读性高等优点&#xff0c;因此在许多场合下都更为适用。那么&#xff0c;如何实现Word转PDF呢&#xff1f;本文将介绍几种常用的方法&#xff0c;帮…