IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 哈尔滨理工大学第12届程序设计竞赛 J 大数乘法 -> 正文阅读

[C++知识库]哈尔滨理工大学第12届程序设计竞赛 J 大数乘法

链接:https://ac.nowcoder.com/acm/contest/30825/J

题目描述
给定整数 x x x, y y y,你需要输出 x y x^y xy mod p p p 的值
输入描述:
第一行一个整数 t t t 1 ≤ t ≤ 10 1 \leq t \leq 10 1t10),表示接下来有 t t t 组测试用例,每个测试用例有三行整数 x , y , p x,y,p x,y,p
0 ≤ x ≤ 100000 0 \leq x \leq 100000 0x100000 0 ≤ y ≤ 1 0 100000 0 \leq y \leq 10^{100000} 0y10100000, 100000 ≤ p ≤ 1000000007 100000 \leq p \leq 1000000007 100000p1000000007
输出描述:
输出 t t t 行,每行一个整数代表 x y x^y xy mod p p p 的值。
示例1
输入

5

3
4
998244353

2
10
998244353

0
100
998244353

1
100
998244353

4
100
1000000007

输出

81
1024
0
1
499445072

备注:
0 0 = 1 0^{0}=1 00=1

思路:

假设 y = 789 y=789 y=789 ,那么
x y ? % ? p = ( x ? % ? p ) 700 ? ( x ? % ? p ) 80 ? ( x ? % ? p ) 9 x^y \ \% \ p={(x \ \% \ p)}^{700}*{(x \ \% \ p)}^{80}*{(x \ \% \ p)}^{9} xy?%?p=(x?%?p)700?(x?%?p)80?(x?%?p)9

( x ? % ? p ) 700 = ( x ? % ? p ) 10 0 7 ( x ? % ? p ) 80 = ( x ? % ? p ) 1 0 8 ( x ? % ? p ) 9 = ( x ? % ? p ) 1 9 {(x \ \% \ p)}^{700}={(x \ \% \ p)}^{100^7}\\ {(x \ \% \ p)}^{80}={(x \ \% \ p)}^{10^8}\\ {(x \ \% \ p)}^{9}={(x \ \% \ p)}^{1^9}\\ (x?%?p)700=(x?%?p)1007(x?%?p)80=(x?%?p)108(x?%?p)9=(x?%?p)19
于是可以做预处理,先算出 ( x ? % ? p ) 1 0 n {(x \ \% \ p)}^{10^n} (x?%?p)10n ,然后与 y y y 的每一位再做幂,把幂的结果做连乘积即可。

AC 代码

#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define ll long long
using namespace std;

const int maxn=1e6+7;

ll qpow(ll a,ll b,ll p){//a^b%p,快速幂,也可以不用
    ll ans=1,base=a;
    while(b){
        if(b&1) ans*=base,ans%=p;
        base*=base,base%=p;
        b>>=1;
    }
    return ans;
}

signed main(){
	cin.tie(0)->sync_with_stdio(0);
	int T;cin>>T;
	while(T--){
		ll x,p;
		string y;
		vector<ll> pre(maxn,0);
		cin>>x>>y>>p;
		reverse(y.begin(),y.end());
		int len=y.size();
		pre[0]=x%p;
		FOR(i,1,len-1)
			pre[i]=qpow(pre[i-1],10,p);
		ll ans=1;
		FOR(i,0,len-1)
			ans=ans*qpow(pre[i],y[i]-'0',p)%p;
		cout<<ans<<'\n';
	}
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 15:59:31  更:2022-04-06 16:01:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:16:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码