当前位置: 首页 > news >正文

欧拉降幂-乘积幂次

题目描述

输入描述

输入共一行,包含两个整数 n,m。

输出描述

输出共一行,表示答案。

输入输出样例

示例 1

输入

2 3

 

输出

64

解题代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll p=1e9+7;  // 定义模数 p = 10^9 + 7
ll n,m;

// 快速幂函数,计算 a^b % p
ll qmi(ll a,ll b)
{
  ll res =1;
  while(b)
  {
    if(b&1)res = res*a%p;  // 如果 b 的最低位是 1,累乘到结果中
    a=a*a%p,b>>=1;  // a 自乘,b 右移一位
  }
  return res;
}

int main()
{
  cin>>n>>m;  // 输入 n 和 m

  // 计算欧拉函数 phi(p),因为 p 是质数,phi(p) = p-1
  ll c=1e9+7,phi=c;
  for(int i=2;i<=c/i;++i)
  {
    if(c%i)continue;  // 如果 i 不是 c 的因数,跳过
    phi=phi/i*(i-1);  // 更新 phi 的值
    while(c%i==0)c/=i;  // 将 c 中的所有 i 因子去掉
  }
  if(c>1)phi=phi/c*(c-1);  // 如果 c 还有剩余的大于 1 的因数,更新 phi

  // 计算 F(m) = m! % phi
  ll b=1;
  for(int i=1;i<=m;++i)b=b*i%phi;

  // 输出 n^F(m) % p
  cout<<qmi(n,b)<<'\n';
  return 0;
}

1. 题目分析:

因此,我们需要利用数论中的欧拉定理来简化计算。


欧拉定理:


方法思路:


为什么想到这个方法?


代码实现的关键点:

2. 数学原理

 

 

 

 

 

 

 

相关文章:

  • RocketMQ 性能优化与调优策略(二)
  • 【redis】Jedis 操作 Redis 基础指令(上)
  • 2022 年 3 月青少年软编等考 C 语言七级真题解析
  • 【Azure 架构师学习笔记】- Azure Databricks (22) --Autoloader
  • LeetCode 热题 100_前 K 个高频元素(75_347_中等_C++)(堆)(哈希表+排序;哈希表+优先队列(小根堆))
  • 基于ssm的自习室预订座位管理(全套)
  • 蓝桥杯 阶乘的和
  • 登录Xshell主机及Linux基本指令
  • SpringBoot之一个注解完成所有类型的文件下载!
  • MySQL UPDATE 更新操作详解
  • 深入解析GORM的配置选项及示例
  • clickhouse清除system 表数据释放磁盘空间
  • 内容中台智能推荐服务创新路径
  • 网上怎么样可以挣钱,分享几种可以让你在家赚钱的兼职项目
  • 开发过程中的网络协议
  • SpringMVC(八)Knife4j 接口文档
  • XML 树结构
  • 爬虫逆向:逆向中用到汇编语言详细总结
  • 网络层协议
  • 教育直播培训系统源码解析:核心功能与实现方式
  • 五一假期上海口岸出入境客流总量预计达59.4万人,同比增约30%
  • 来上海喝云南咖啡!上海国际咖啡文化节助力咖啡产业破圈出海
  • 南京106亿元成交19宗涉宅地块:建邺区地块楼面单价重回4.5万元
  • 中国建设银行浙江省分行原党委书记、行长高强接受审查调查
  • 安徽省公安厅原副厅长刘海石主动投案,正接受审查调查
  • 新造古镇丨上海古镇朱家角一年接待164万境外游客,凭啥?