牛客国庆集训派对Day5 - B 电音之王 (取大mod的快乘黑科技)

快速乘、快速幂算法的实现原理+过程分析 快速乘主要是解决乘法可能会爆的情况,快速乘原理就是利用了乘法分配来将ab转化为多个式子相加的形式求解。 阅读详情

https://www.nowcoder.com/acm/contest/205/B

 

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<assert.h>
using namespace std;
typedef long long LL;

typedef unsigned long long u64;
typedef __int128_t i128;
typedef __uint128_t u128;

struct Mod64 {
	Mod64():n_(0) {}
	Mod64(u64 n):n_(init(n)) {}
	static u64 init(u64 w) { return reduce(u128(w) * r2); }
	static void set_mod(u64 m) {
		mod=m; assert(mod&1);
		inv=m;
		for(int i=0;i<5;i++)
			inv*=2-inv*m;
		r2=-u128(m)%m;
	}
	static u64 reduce(u128 x) {
		u64 y=u64(x>>64)-u64((u128(u64(x)*inv)*mod)>>64);
		return LL(y)<0?y+mod:y;
	}
	Mod64& operator += (Mod64 rhs) { n_+=rhs.n_-mod; if (LL(n_)<0) n_+=mod; return *this; }
	Mod64 operator + (Mod64 rhs) const { return Mod64(*this)+=rhs; }
	Mod64& operator -= (Mod64 rhs) { n_-=rhs.n_; if (LL(n_)<0) n_+=mod; return *this; }
	Mod64 operator - (Mod64 rhs) const { return Mod64(*this)-=rhs; }
	Mod64& operator *= (Mod64 rhs) { n_=reduce(u128(n_)*rhs.n_); return *this; }
	Mod64 operator * (Mod64 rhs) const { return Mod64(*this)*=rhs; }
	u64 get() const { return reduce(n_); }
	static u64 mod,inv,r2;
	u64 n_;
};
u64 Mod64::mod,Mod64::inv,Mod64::r2;

//a*b%p 的防止超ll限度的写法
u64 pmod(u64 a,u64 b,u64 p) {
	u64 d=(u64)floor(a*(long double)b/p+0.5);
	LL ret=a*b-d*p;
	if (ret<0) ret+=p;
	return ret;
}

//Mod64::set_mod(M);	//模设定
//Mod64 a(_a);	//定义,初始化
//_a = a.get();	//转数值
//用%llu输入输出
//定义 u64;

int main()
{
	int T;
	scanf("%d",&T);
	while(T--){
		u64 a0_,a1_,m0_,m1_,c_,M_;
		int k;
		scanf("%llu%llu%llu%llu%llu%llu%d",&a0_,&a1_,&m0_,&m1_,&c_,&M_,&k);
		Mod64::set_mod(M_);
		Mod64 a0(a0_),a1(a1_),m0(m0_),m1(m1_),c(c_),M(M_),ans(1),x(0);
		ans=ans*a1*a0;
		for(int i=2;i<=k;i++){
			x=m0*a1+m1*a0+c;
			ans=ans*x;
			a0=a1;
			a1=x;
		}
		printf("%llu\n",ans.get());
	}
}


 

【基本算法】快速幂和快速乘法详解 文章目录一.快速幂1.简介2.思想3.代码二.快速乘法1.简介2.思想3.代码三.快速幂+快速乘法 快速幂和快速乘法都是利用了二进制的思想,时间复杂度为O(logN)O(logN)O(logN)级别的算法。 算法有两大优点:①便于取模操作(避免溢出) ②时间复杂度较低 一.快速幂 1.简介 先来说说运用较广的快速幂算法,虽然math库中有pow函数,但是因为精度问题使用的不是很多,所以在涉及取模时广泛应用的是快速幂的模板 2.思想 以132713^{27}1327为例进行计算 朴素的实现幂次的算法是连乘,即 阅读详情

相关推荐

华龙电音基调查询器

华龙电音基调查询器-华龙电音基调网

快速乘法 详解

快速乘法(也称为“快速幂的乘法扩展”)是一种用于高效计算两个数乘积的算法,特别适合处理大数或在某些特定环境(如计算机低层次硬件实现)中优化乘法运算。其核心思想是将乘法分解为一系列加法和位移操作,从而减少计算复杂度。和分治思想,将乘法运算转化为一系列位移操作和加法。快速乘法广泛用于高效算法中,是程序设计和算法优化的重要工具之一。它们的核心思想都是通过分治和二进制展开优化运算。在某些场景下(如计算大数模运算),需要快速计算。通过快速乘法避免溢出。的二进制位,计算乘积。

T_Y_F_的博客 1779

零基础微信理财通基金实操指南(2026版)

先活下来:保证不亏大钱,再想赚钱慢慢变富:年化10%,7年翻倍,这已经很好了开始比完美重要:今天先存100元到零钱通,就是最好的开始现在打开微信,进入理财通,完成第一步风险测评吧!有任何问题可以随时问,我会用最通俗的方式解释。

老韩的Linux云计算架构师进阶之路 1683

快速乘模板

文章目录一、介绍1.目的2.原理二、实现代码 一、介绍 1.目的 计算乘法时,可能在结果还未出来时就已经爆掉了,以至于无法正确对结果取模,所以需要用快速乘来把乘法操作进行细分,保证结果取模的正确性。 2.原理 以5∗105*105∗10为例: 将10划分为二进制表达:1001 那么计算5*10就可以划分:5∗(23∗1+22∗0+21∗0+20∗1)5*(2^3*1+2^2*0+2^1*0+2^0*1)5∗(23∗1+22∗0+21∗0+20∗1) 我们的操作就是把乘法划分为这几个项的相加,过程中进行.

qq_52441682的博客 312

【OpenCV】背景替换(opencv、python),照片、证件照的背景替换(抠图)

目录步骤:导入库1、读入将要抠图的图片2、create一个带颜色域的mask3、通过mask使得原图只显示汽车,即抠出所需要的部分4、将要替换掉的图像resize或裁剪到和上述图片一样的大小5、将该图片预留出将要重叠上的部分,即将mask部分改为(0,0,0)6、通过和运算使得两部分图片mask部分替换7、最后保存图片 步骤: 导入库 import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np imp

weixin_41729258的博客 4361

Git系列(一)、Git基础教程【建议收藏】

Git一、Git简介1.1、什么是Git? 一、Git简介 1.1、什么是Git? Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持。 .........

一宿君 4万+

快速乘(模板)

快速乘和快速幂原理一样 主要用于是64bit整数乘法时会爆longlong但是写高精度又太麻烦的情况 代码 #include&amp;lt;bits/stc++.h&amp;gt; #define ll long long using namespace std; inline ll ksc(ll a, ll b, ll mod){ ll ans = 0; while( b &amp;gt; 0 ){ if...

BIGBIGPPT的博客 6263

lumerical中DEVICE和MODE模块的交互使用(真的很干货!!可以自信的说网上绝对找不到比我更详细的步骤了)

几个脚本文件很重要! Lumerical仿真流程: 一、DEVICE: (1).建模并且运行完之后,在脚本提示符下键入以下脚本行以运行plotDopingProfile.lsf如图1(文件名如果索引不到的话就可以把文件直接用notepad++打开,然后把代码直接输入到device中script脚本中 如图2)脚本文件并生成下图 如图3: (图2) (图1) (图3) (2).仿真...

1万+

快速乘法算法原理及实现

快速乘法基本原理  由于计算机底层设计的原因,做加法往往比乘法快的多,因此将乘法转换为加法计算将会大大提高(大数,比较小的数也没必要)乘法运算的速度,除此之外,当我们计算a*b%mod的时候,往往较大的数计算a*b会超出long long int的范围,这个时候使用快速乘法方法也能解决上述问题.   快速乘法的原理就是利用乘法分配率来将a*b转化为多个式子相加的形式求解(注意这时使用乘法分

langzi989的专栏 1万+

CanOpen PDO映射实战:从原理到配置的完整指南

本文详细解析了CanOpen PDO映射的原理与配置流程,从基础通信机制到实战配置步骤,涵盖禁用PDO、清空映射、逐项映射和使能PDO等关键环节。特别针对西门子G120变频器、台达伺服和倍福CX控制器等不同厂商设备,提供了具体的配置技巧和常见问题排查指南,帮助工程师快速掌握多厂商设备间的PDO通信配置。

weixin_30718391的博客 515

YOLO11涨点优化:训练技巧 | 使用标签平滑(Label Smoothing)配合余弦退火学习率,防止过拟合,稳步提点

摘要: YOLO11凭借动态卷积核调度、自适应特征融合等创新成为2026年目标检测主流,但面临训练集过拟合问题。文章聚焦两种零推理开销的正则化技巧:标签平滑(Label Smoothing)和余弦退火学习率(Cosine Annealing LR)。标签平滑通过软化硬标签(如将[1,0]改为[0.9,0.1])防止模型过度自信,代码中通过label_smoothing=0.1一键启用;余弦退火则以平滑的余弦曲线调整学习率(cos_lr=True),避免阶梯衰减的震荡。两者组合可显著缩小YOLO11训练与验证

2601_95807009的博客 45

牛客国庆集训派对Day5 Solution

A 璀璨光滑 留坑。 B 电音之王 蒙特马利大数乘模运算 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 typedef long long ll; 5 typedef unsigned long long u64; 6 typedef __int128_t ...

dianxi0949的博客 105

Cadence OrCAD Capture软件启动过程卡死且无法恢复的解决方法

如下图所示Cadence OrCAD Capture软件在启动后出现卡死的现象,且等待后无法自动恢复,需要强行关闭,再次启动依然卡死。

fydar的博客 4042

牛客国庆集训派对Day5 B 电音之王(CCPC_CAMP) 黑科技-蒙哥马利快速乘

电音之王 dls专卡Θ(1)\Theta(1)Θ(1)快速乘,orzzzzz,我只想说,dls牛逼! 题解:蒙哥马利 代码 #include &lt;bits/stdc++.h&gt; using namespace std; #define rep(i,a,n) for (int i=a;i&lt;n;i++) #define per(i,a,n) for (int i=n-1;i&gt;=a;...

Eternally831143的博客 496

uniapp - 解决报错Error in event handler for “service.requestComponentInfo“: “TypeError: cannot read prop

uniapp,报错,Error in event handler for "service.requestComponentInfo": "TypeError: cannot read properties of undefined (reading 'matches')",h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,如何解决这个问题,一直报错,uniapp报错Error,都检查了还是报错,怎么解决这个错误,uniapp出现Error in event han

🏆 前端领域优质创作者 6379

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

牛客国庆集训派对Day5 B 电音之王

题目:点击打开链接 题意:略。 分析:首先用暴力快速乘O(n*logn)t了,取模一个long long范围内的数太耗时了,但是一直不知道怎么优化取模,后来才知道有蒙哥马利算法优化a*b%c,蒙哥马利算法适用于模数为奇数,入门可参考https://blog.csdn.net/zgzczzw/article/details/52712980,网上没找到实现代码,下面的代码是杜教的,留着当板子用了...

常胜将军的博客 471

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

牛客国庆集训派对Day5B电音之王(Montgomery modular multiplication)

Montgomery modular multiplication 代码出处min_25 杜教暑期时候讲过(我不懂但是我会贴代码呀.jpg),正好牛客网放了camp的题目,那就mark一下 优秀的卡常技巧 #include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; #define rep(i,a,n) for (int i=a;i&amp;lt;n;i++) ...

indiewar's blogs(wust_lzl) 344

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

牛客国庆集训day5 B 电音之王 (大数乘模)

链接:https://www.nowcoder.com/acm/contest/205/B来源:牛客网 题目描述 终于活成了自己讨厌的样子。 听说多听电音能加快程序运行的速度。 定义一个数列,告诉你a0,a1,m0,m1,c,定义an=m0an-1+m1an-2+c对所有n≥ 2。 求 输入描述: 第一行一个整数T(1≤ T≤ 1000),表示数据组数。每组数据一行7个整数...

weixin_30500473的博客 93

华龙电音基调网_华龙电音基调查询器下载(最好用的电音基调查询器) v1.4免费版...

华龙电音基调查询器是最全最好用的电音基调查询器,它里面的乐曲库非常多,让你在制作电音的时候可以有更多的基调可以使用。如果你是调音师,那么这款软件非常适合你,华龙电音基调网是国内做的比较好的一个网站,你可以通过歌曲名,歌词片段进行查询!有需要的朋友可以下载使用!软件亮点:1、支持自动跟随“酷狗音乐”、“QQ音乐”、“网易云音乐”、“酷我音乐”,2、乐库齐全,拥有海量电音基调3、软件免费使用,界面简洁...

weixin_29711757的博客 1万+

快速乘法 原理详解

快速乘法是通过二进制分解和位操作优化乘法运算的高效算法。它利用二进制的逐位处理特性,大幅减少了计算量,尤其适用于整数运算和大数场景。以下是快速乘法的详细原理解析。快速乘法只使用常数个变量。快速乘法通过处理被乘数。因此,可以通过逐位检查。

T_Y_F_的博客 1537

快速幂 && 快速乘原理讲解(模板)

引言: 我们发现,在int型下使用pow函数求5的三次方,结果为124。 如图: 原因: pow函数的返回值为double型,因浮点数长度问题,存在截断误差。 解决方法: 将变量定义为double型 有没有更快求幂的方法? 假设我们要求a^b,按照朴素算法就是把a连乘b次,这样一来时间复杂度是O(b),即是O(n)级别。但快速幂能做到O(logn)的复杂度。 快速幂...

Lili Liang的博客 2万+

快速乘【模板】

快速乘:a*a=a+a+a·····+a(a个a相加),O(lgn/lg2)复杂度; 如果a比较大:a=a*a%m   =》   a=(a%m)*(a%m)%m  有可能m比较大,最终爆LL,快速乘能够解决; #include typedef long long LL; LL f(LL a,LL b,LL c) { LL k=0; while(b) {

王小二的博客 637

数论——快速乘(模板)

快速乘用途:计算a*b%mod,而且a*b大于long long。 基本原理:计算机中计算加法的速度往往比乘法快多了,而快速乘就是通过乘法分配律将a*b分解成多项式相加。 举个枣子:20*13,将13转化成二进制1101,则就是20*2^0+20*2^2+20*2^3。(类似于快速幂) void quick_mulitiply(ll a,ll b,ll mod) { ll res=0; while(b) { if(b&1) res=(res+a)%mod; a=(a+a)%mod

xqx_Zi_yu 381

快速幂快速乘模板【c++】

玩算法题用的,快速幂快速乘模板,c++的。

HowToPause的博客 348
上一篇: Codeforces Round #513 - E. Sergey and Subway (树形DP)
下一篇: 牛客国庆集训派对Day6 - A Birthday (网络流 花费和流量有关)
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值