欧拉定理(降幂)

2023-11-01

欧拉定理

定理

在这里插入图片描述
感觉这个定理降幂的时候用的多一点

题1

题面

在这里插入图片描述

思路

对于每一个数字ai,出现的次数为 A i = C n − 1 k − 1 A_i = C_{n-1}^{k-1} Ai=Cn1k1

排序后,若ai为最大值,则作为最大值出现的次数为 B i = C i k − 1 B_i = C_{i}^{k-1} Bi=Cik1

排序后,若ai为最小值,则作为最大值出现的次数为 C i = C n − i − 1 k − 1 C_i = C_{n-i-1}^{k-1} Ci=Cni1k1

那么ai的贡献为 a i A − B − C {a_i}^{A-B-C} aiABC,但是指数太大,需要降幂

因为1e9+7是质数,所以 a i A − B − C ( m o d p ) {a_i}^{A-B-C}(modp) aiABC(modp) = a i A − B − C ( m o d p h i ( p ) ) ( m o d p ) {a_i}^{A-B-C (mod phi(p))}(modp) aiABC(modphi(p))(modp)

故对于组合数可以直接 n 2 n^2 n2预处理

代码
#include <iostream>
#include <cstdio>
#include <set>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <fstream>
#include <iomanip>
//#include <unordered_map>
using namespace std;
#define dbg(x) cerr << #x " = " << x << endl;
typedef pair<int, int> P;
typedef long long ll;
#define FIN freopen("in.txt", "r", stdin);freopen("out.txt","w",stdout);
const int MAXN = 1e3+5;
const int mod = 1e9+7;
ll a[MAXN];
ll C[MAXN][MAXN];
void init()
{
    for(int i = 0; i < MAXN; i++)
    {
        C[i][0] = 1;
        for(int j = 1; j <= i; j++)
        {
            C[i][j] = (C[i-1][j] + C[i-1][j-1]) % (mod - 1);
        }
    }
}
ll qpow(ll a, ll b)
{
    ll ans = 1, base =a ;
    while(b)
    {
        if(b & 1)
        {
            ans  = ans * base % mod;
        }
        base = base * base % mod;
        b >>= 1;
    }
    return ans;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    init();
    int t;
    cin >> t;
    while(t--)
    {
        int n, k;
        cin >> n >> k;
        for(int i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        sort(a, a + n);
        ll ans = 1;
        for(int i = 0; i < n; i++)
        {
            ll mi = C[n-1][k-1] - C[i][k-1] - C[n-i-1][k-1];
            mi = (mi % (mod - 1) + (mod - 1)) % (mod - 1);
            ll tmp = qpow(a[i], mi);
            ans = (ans * tmp) % mod;
        }
        cout <<ans << endl;
    }
    return 0;
}

题2

题面

在这里插入图片描述

思路

一层一层套用欧拉降幂即可
因为只需要mod10,所以只需要记录10以内的欧拉函数,当只剩1的时候特判处理即可

代码
#include <iostream>
#include <cstdio>
#include <set>
#include <list>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <fstream>
#include <iomanip>
//#include <unordered_map>
using namespace std;
#define dbg(x) cerr << #x " = " << x << endl;
typedef pair<int, int> P;
typedef long long ll;
#define FIN freopen("in.txt", "r", stdin);freopen("out.txt","w",stdout);
string a, b;
ll getnum(string s, int mod)
{
    ll ret = 0;
    for(int i = 0; i < s.size(); i++)
    {
        ret = ret * 10 + (s[i] - '0') % mod;
        ret %= mod;
    }
    return ret % mod;
}

int mypow(string s, int n, int mod) {///s^n%mod
    int a = getnum(s, mod), ret = 1;
    while(n--) ret = ret * a % mod;
    return ret;
}
int phi(int x) {
    if(x == 10) return 4;
    if(x == 4) return 2;
    if(x == 2) return 1;
    return -1;
}

ll solve(string s, int n, int mod)
{
    int a = getnum(s, mod); 
    if(mod == 1) return 1;
    if(n == 1) return a %mod + mod;
    int mi = solve(s, n-1, phi(mod));
    return mypow(s, mi, mod) + mod;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> a >> b;
    if(a == "1" || b == "1") {
        cout << a[a.length() - 1] << endl;
    } 
    else
    {
        int n = 0;
        if(b.size() > 2)
        {
            n = 100;
        }
        else n = getnum(b, 100);
        int p = solve(a, n-1, phi(10));
        cout << mypow(a, p, 10) << endl;
    }
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

欧拉定理(降幂) 的相关文章

  • chmod命令原理及用法详解

    Chmod命令主要用于修改 设置文件权限 chmod 修改文件权限主要有两种方式 字母法与数字法 虽然数字法相对字母法简单 但是数字法是基于字母法 所以这里先介绍字母法 1 字母法 chmod u g o a r w x 文件名 以上是ch
  • Linux-应用编程-学习总结(3):进程间通信(上)

    Linux 应用编程 学习总结 3 进程间通信 上 前言 进程间通信相关概念 管道 管道的概念 管道的原理 管道的局限性 创建匿名管道 fifo 有名管道 特点 使用场景 创建方式 内存映射区 前言 这次对进程间通信进行总结 上一篇文章以及
  • 微信开放平台【第三方平台】java开发总结:预授权码(pre_auth_code)(三)

    微信第三方平台预授权码 pre auth code 开发说明 全网最详细的微信第三方平台预授权码开发说明 预授权码 预授权码 pre auth code 是第三方平台方实现授权托管的必备信息 每个预授权码有效期为 10 分钟 需要先获取令牌
  • XMPP客户端库Smack 4.1.4版官方开发文档之二

    本文转载自 博客主页 http blog csdn net chszs 三 Smack库的组成 Smack库可以内嵌到任意的Java应用程序中 Smack库有数个JAR文件组成 非常具有灵活性 1 smack core jar 提供了核心X
  • 这是mybatis最简单的入门

    这里有一个demo 这是mybatis最简单的入门 使用的IDE为idea 是maven的哦 这篇只是很简单的一个查询demo 目标是ssm 先来pom文件 这个不知道在网上哪里找的 lt gt
  • 自定义限制接口访问次数(ExpiringMap)

    ExpiringMap简介 它具有高性能 低开销 零依赖 线程安全 使用ConcurrentMa的实现过期entries等优点 主要特点包括 过期策略 可变有效期 最大尺寸 侦听器过期 延迟输入加载 过期自省 可设置Map中的Entry在一
  • python opencv旋转,Python OpenCV cv2.rotate()用法及代码示例

    OpenCV Python是旨在解决计算机视觉问题的Python绑定库 cv2 rotate 方法用于将2D数组旋转90度的倍数 函数cv rotate以三种不同的方式旋转数组 用法 cv2 cv rotate src rotateCode
  • Pandas 三大对象

    1 pandas的Series对象 pandas的Series对象是一个带索引数据构成的一维数组 可以用一个数组创建Series对象 import pandas as pd data pd Series 0 25 0 5 0 75 1 0
  • 为你的嵌入式设计选择合适的低功耗处理器

    在早期 获得低功耗的CPU通常意味着牺牲功能 以降低的时钟速度运行或等待新的低功耗处理技术以降低待机 和有功功耗 无论如何 情况已不再如此 并且处理器领域已经发生了戏剧性的变化 随着处理技术的进步以及创新的芯片设计和高粒度电源管理软件 带来
  • Python2.7.16安装(Ubuntu16.04)

    Python2 7 16安装 Ubuntu16 04 前面的文章已经介绍了在Windows上安装Python2和Python3了 现在介绍Linux系统上的安装 Ubuntu16 04上默认安装了Python2 7和Python3 5 Re
  • HTML 文件中引入高德地图

    准备工作 1 在高德开放平台 注册开发者账号 2 登陆之后 进入 应用管理 点击 我的应用 选择右上角 创建新应用 3 为应用添加 Key 在 服务平台 一项选择 Web 端 JSAPI 页面实现 1 创建一个div 作为地图的容器 2 设
  • Week2:包含 min 函数的栈

    1 题目描述 定义栈的数据结构 请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中 调用 min push 及 pop 的时间复杂度都是 O 1 示例 MinStack minStack new MinStack minSta
  • Vue下OpenLayers中Style-Icon的图片路径

    OpenLayers加载图片的方式 1 使用 require 方式加载图片 图片路径 根目录 src assets let styles icon new Style image new Icon anchor 0 5 1 src requ
  • 解决阿里云无法正常使用samba的问题

    昨天在阿里云上申请了一个云服务器 系统用的是ubuntu14 04 由于是免费的 初次使用 配置较低 单核1G内存 40G硬盘 所以在服务器上不方便安装图形界面 默认的系统镜像是没有桌面系统的 毕竟只是服务器 没有图形界面总觉得不是很方便
  • TensorFlow2.0学习笔记-3.模型训练

    3 模型训练 3 1 Keras版本模型训练 构建模型 顺序模型 函数式模型 子类模型 模型训练 model fit 模型验证 model evaluate 模型预测 model predict 使用样本加权和类别加权 回调函数 Model
  • 二叉树树叶与度为2的节点数关系论证

    如果二叉树树叶总数为n0 度为2的节点总数为n2 那么有n0 n2 1 下面论证这一关系 假设树叶总数为0 度为1的节点总数为n1 度为二的节点总数为n2 那么二叉树总结点数n满足以下关系 n n0 n1 n2 另一方面 除根节点以外的所有
  • CentOS下7zip包的解压、压缩方法

    1 安装7z 1 直接安装 yum install p7zip 2 源代码下载编译 wget http sourceforge net projects p7zip 9 13 p7zip 9 13 src all tar bz2 downl
  • ESP32通过UART串口使用AT指令

    ESP32通过UART串口使用AT指令 MCU起航 mcublog cn ESP32通过UART串口使用AT指令 MCU起航 mcublog cn
  • Unity基于NGUI点击事件向下传递的解决方法

    Unity开发中经常有点击Button 弹窗提示界面 然后点击任意区域关闭提示界面并且提示界面下一层的事件依然可以触发 需要点击事件向下传递 UGUI对此支持相对好处理 NGUI本身对此支持不好 这里提供一个方法 public class

随机推荐

  • 使用IDM下载视频出现“由于法律原因,IDM无法下载...

    一 问题描述 由于法律原因 IDM无法下载 如图 二 原因分析 下载该IDM抓取的M3U8文件 查看其中的内容发现 EXT X KEY 字段已经写明了加密方式是AES 128 包含一个URI和IV值 EXTM3U EXT X VERSION
  • SQL批处理

    转载自http www cnblogs com kissdodog archive 2013 06 30 3163880 html 批处理简介 批处理是作为一个逻辑单元的T SQL语句 如果一条语句不能通过语法分析 那么不会运行任何语句 如
  • docker超快速安装redis(以配置文件启动)附上几个坑

    docker超快速安装redis 以配置文件启动 附上几个坑 1 下载好Xshell和Xftp 下载地址 只需要填写一个真实邮箱即可 2 创建目录 在user下 在别的目录需要管理员权限 选择用户下面的一个文件 创建redis文件夹 再创建
  • The Ultimate Guide to Python Type Checking

    In this guide you will get a look into Python type checking Traditionally types have been handled by the Python interpre
  • 物联网 单片机 嵌入式毕业设计题目 - 350例

    文章目录 1前言 2 如何选题 2 1 不要给自己挖坑 2 2 难度把控 2 3 如何命名题目 3 单片机 嵌入式 选题大全 3 1 嵌入式方向 3 2 算法方向 3 3 移动通信方向 3 4 学长作品展示 最后 1前言 近期不少学弟学妹询
  • NeRF代码学习

    学习nerf pytorch项目代码 以及pytorch lighting形式代码 首先需要读取数据 将数据输入神经网络进行训练 包括生成编码 生成光线 计算密度颜色 体渲染步骤 将数据输出 1 数据集读取 代码中给出的样例 是读取Blen
  • 用 Python 进行百度搜索,并自动打开前 5 个结果

    情景介绍 在使用搜索引擎的时候 除非目的非常明确 我都会用鼠标中键连续在新选项卡中打开好几个页面 然后再逐一查看 本文编写 Python 脚本 使得这个过程自动化 也就是 给定搜索关键词进行百度搜索 挑出搜索结果的前 5 条 然后在浏览器中
  • python获取股票数据,并计算技术指标

    python获取stock数据 计算技术指标使用talib库 方法一 使用 pandas datareader data 库 该库获取的历史数据更多一些 上证股票在股票代码后面加上 SS 深圳股票在股票代码后面加上 SZ 代码 stockn
  • OPENGL学习(一)认识OPENGL和各种库

    认识OPENGL和各种库 opengl 本身是一种标准 告诉你如何一个图形库需要哪些函数 真正这些函数是不同显卡厂商提供的 glu The OpenGL Utility Library OPENGL实用库 就是对OPENGL的更高级的封装
  • Unity中Bloom不发光问题解决

    找了很久Bloom为什么不发光问题 只需要打开相机上得HDR就好了 如果是Off得状态得话那么就没泛光了 完美得解决了 分析问题如下 解释什么是HDR 高动态范围 高动态范围 HDR 技术能够产生比标准动态范围 SDR 图像更高的亮度动态范
  • SRS服务器搭建以及展现配置说明

    对于企业而言 数字化建设是一项全面的 系统的工程 不仅仅只是部署几套软件 实现办公自动化而已 尤其是大型企业 数字化的建设往往涉及到了服务器 硬件 软件 网络等一系列内容 如门禁系统和人力 认证等系统集成 实现人脸识别 自动打卡等 监控系统
  • 用RedisDesktopManager访问Redis

    先要将我们的Redis设置允许远程连接 打开 redis conf 文件 将 bind 127 0 0 1 注释掉 否则只允许本机访问 将 protected mode yes 改成 no 关闭保护模式 打开 requirepass foo
  • 新手小白必看 Python爬虫学习路线全面指导

    爬虫是大家公认的入门Python最好方式 没有之一 虽然Python有很多应用的方向 但爬虫对于新手小白而言更友好 原理也更简单 几行代码就能实现基本的爬虫 零基础也能快速入门 让新手小白体会更大的成就感 因此小编整理了新手小白必看的Pyt
  • 微信小程序之别踩白块游戏

    微信小程序项目实例 别踩白块游戏 项目成果展示 项目功能具体 核心代码展示 项目成果展示 微信小程序 别踩白块游戏演示 项目功能具体 该项目是一个别踩白块的小游戏 会拥有无限模式 限时模式 极速模式等游戏模式 并且可以记录最高得分和最长时长
  • STM32学习笔记—串口数据的基本收发(基于HAL库)

    在STM32中 串口主要使用的是异步串行通信 由于我现在学习的是HAL库 所以我只留意HAL库里面的有关串口的发送和接受函数 数据的接收和发送主要分阻塞式和非阻塞式 由于阻塞式是通过延时来实现的 也就是说在发送和接收的时候 整个系统都在都停
  • R语言保存EXCEL小技巧

    R语言中将数据框保存为EXCEL的方法 文章目录 前言 一 小tip 前言 创建名为df的数据框 一 小tip 使用readr包和openxlsx包
  • C++ sort函数对class类排序

    sort是stl中一个经常用到的排序函数 可以对数组或类似数组 例如vector 的结构进行排序 默认为升序排序 例如下面的代码对vec进行升序排序 sort vec begin vec end 若想降序排序 则只需加greater即可 s
  • Linux基础网络设置和Samba文件共享服务

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有收获 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 目录 一 Linux基础网络设置 1 服务突然中
  • BUG :failed with repodata from current_repodata.json, will retry with next repoda

    在anaconda里面再次冲洗进行安装pytorch 时 具体步骤可见安装笔记 报错 failed with repodata from current repodata json will retry with next repoda 应
  • 欧拉定理(降幂)

    欧拉定理 定理 感觉这个定理降幂的时候用的多一点 题1 题面 思路 对于每一个数字ai 出现的次数为 A i C n