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

在这里插入图片描述

首先我们要知道,正常计算的话,指数优先级最高,因此得先计算指数,比如:
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.mfbz.cn/a/586094.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手写一个uart协议——rs232(未完)

先了解一下关于uart和rs232的基础知识 文章目录 一、RS232的回环测试1.1模块整体架构1.2 rx模块设计1.2.1 波形设计1.2.2代码实现与tb1.2.4 仿真 1.3 tx模块设计1.3.1波形设计 本篇内容&#xff1a; 一、RS232的回环测试 上位机由串口助手通过 rx 线往 FPGA 发 8 比特数据&a…

Qt在任务栏图标和系统托盘图标上显示红点

在任务栏图标上显示红点 关键类&#xff1a;QWinTaskbarButton #include <QWinTaskbarButton>QPointer<QWinTaskbarButton> taskbarBtn nullptr; if (!taskbarBtn) {taskbarBtn new QWinTaskbarButton(window);taskbarBtn->setWindow(window->windowHand…

用C实现通讯录(详细讲解+源码)

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL.. &#x1f4da;以后会将数据结构收录为一个系列&#xff0c;敬请期待 ● 本期内容会给大家带来通讯录的讲解&#xff0c;主要是利用结构体来实现通讯录&#xff0c;该通讯…

一周学会Django5 Python Web开发 - Django5 ORM数据库事务

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

如何给MP3添加专辑封面

MP3的专辑封面可以直接显示在音频播放器上&#xff0c;但如果我们的音乐文件没有专辑封面怎么办&#xff1f;下面来给大家介绍如何添加mp3封面 打开智游剪辑&#xff08;官网&#xff1a;zyjj.cc&#xff09;&#xff0c;搜索音乐封面添加 我们上传一下音乐文件和专辑封面&…

8 聚类算法

目录 0 背景 1 Kmeans 1.1 聚类数量k的确定 2 DBSCAN 2.1 三个点 2.2 算法流程 3 层次聚类 3.1 过程 4 基于分布的聚类:高斯混合模型 0 背景 聚类算法是一种无监督学习技术&#xff0c;用于将数据集中的数据点划分为不同的组或簇&#xff0c;使得同一组内的数据点彼此相…

【微信公众平台】扫码登陆

文章目录 前置准备测试号接口配置 带参数二维码登陆获取access token获取Ticket拼装二维码Url编写接口返回二维码接收扫描带参数二维码事件编写登陆轮训接口测试页面 网页授权二维码登陆生成ticket生成授权地址获取QR码静态文件支持编写获取QR码的接口 接收重定向参数轮训登陆接…

Linux的vim下制作进度条

目录 前言&#xff1a; 回车和换行有区别吗&#xff1f; 回车和换行的区别展示&#xff08;这个我在Linux下演示&#xff09; 为什么会消失呢? 回车和换行的区别 为什么\r和\n产生的效果不同&#xff1f; 打印进度条&#xff1a; &#xff08;1&#xff09;打印字符串 …

【再探】设计模式—抽象工厂及建造者模式

抽象工厂模式和建造者模式都属于创建型模式。两者都能创建对应的对象&#xff0c;而创建者模式更侧重于创建复杂对象&#xff0c;将对象的创建过程封装起来&#xff0c;让客户端不需要知道对象的内部细节。 1 抽象工厂模式 需求&#xff1a; 在使用工厂方法模式时&#xff0…

TCP协议关于速率的优化机制-滑动窗口详解

在上一章中&#xff0c;我们讲述了TCP协议在传输过程中的可靠性http://t.csdnimg.cn/BsImO&#xff0c;这里衔接上一篇文章继续讲&#xff0c;TCP协议的特性&#xff0c;TCP协议写完之后就写&#xff0c;Http和Https等内容吧 1. 滑动窗口 这里的滑动窗口不是指算法里面的双指…

品牌百度百科词条需要什么资料?

品牌百度百科词条是一个品牌的数字化名片&#xff0c;更是品牌历史、文化、实力的全面展现。 作为一个相当拿得出手的镀金名片&#xff0c;品牌百度百科词条创建需要什么资料&#xff0c;今天伯乐网络传媒就来给大家讲解一下。 一、品牌基本信息&#xff1a;品牌身份的明确 品…

用 PyTorch 构建液态神经网络(LNN)

用 PyTorch 构建液态神经网络&#xff08;LNN&#xff09; 文章目录 什么是液态神经网络为什么需要液态神经网络LNN 与 RNN 的区别用 PyTorch 实现 LNNStep 1. 导入必要的库Step 2. 定义网络架构Step 3. 实现 ODE 求解器Step 4. 定义训练逻辑 LNN 的缺陷总结 什么是液态神经网络…

C语言-嵌入式-STM32:FreeRTOS说明和详解

Free即免费的&#xff0c;RTOS的全称是Real time operating system&#xff0c;中文就是实时操作系统。 注意&#xff1a;RTOS不是指某一个确定的系统&#xff0c;而是指一类操作系统。比如&#xff1a;uc/OS&#xff0c;FreeRTOS&#xff0c;RTX&#xff0c;RT-Thread 等这些都…

docker自定义java运行环境镜像

一、下载jre/jdk 压缩包&#xff0c;centos:7基础镜像 1、 下载jdk/dre 下载jdk或jre 官网下载 根据需求下载 jdk:SE Development Kit(开发环境) jre: SE Runtime Environment (运行环境)2、下载centos:7 # 下载centos7 docker镜像 docker pull centos:7#centos查看系统时间 …

面试经典算法题之双指针专题

力扣经典面试题之双指针 ( 每天更新, 每天一题 ) 文章目录 力扣经典面试题之双指针 ( 每天更新, 每天一题 )验证回文串收获 392. 判断子序列 验证回文串 思路 一: 筛选 双指针验证 class Solution { public:bool isPalindrome(string s) {// 所有大写字母 > 小写 去除非字母…

对比mongodb查询的执行计划,说一说组合索引的优化方案(上)

一、背景 Mongodb数据库&#xff0c;有个160w数据量规模的集合&#xff0c;字段多达几十个&#xff0c;随着需求的迭代&#xff0c;查询条件也是五花八门。 为了提高某个查询的效率&#xff0c;结果都以新增索引解决问题&#xff0c;最后多达16个索引。 这里仅贴出本文会提及…

引领农业新质生产力,鸿道(Intewell®)操作系统助力农业机器人创新发展

4月27日至29日&#xff0c;2024耒耜国际会议在江苏大学召开。科东软件作为特邀嘉宾出席此次盛会&#xff0c;并为江苏大学-科东软件“农业机器人操作系统”联合实验室揭牌。 校企联合实验室揭牌 在开幕式上&#xff0c;江苏大学、科东软件、上交碳中和动力研究院、遨博智能研究…

Spring Boot Admin

概述 Spirng Boot Admin 登录页面 Spring Boot Admin是一个用于管理Spring Boot应用的监控工具,它允许你查看和管理多个Spring Boot应用实例。用于应用信息进行界面化的展示&#xff0c;常常辅助我们开发人员快速查看服务运行状态在微服务架构中&#xff0c;Spring Boot Admin通…

中科院突破:TalkingGaussian技术实现3D人脸动态无失真,高效同步嘴唇运动!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 引言&#xff1a;探索高质量3D对话头像的新方法 在数字媒体和虚拟互动领域&#xff0c;高质量的3D对话头像技术正变得日益重要。这种技术能够在虚拟现实、电影…

谷粒商城实战(020 RabbitMQ-消息确认)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第258p-第p261的内容 消息确认 生产者 publishers 消费者 consumers 设置配置类 调用api 控制台 抵达brocker 代理 新版本ReturnCallbac…
最新文章