64位整数乘法

a * b mod p可以转换为 (a+a+a+a+.......+a) mod p

即为处理

a

2a

4a

8a

..........

#include<iostream>
using namespace std;
int main(){
   long long a,b,p;
   cin>>a>>b>>p;
   long long ans = 0;
   a%=p;
   while(b){
       if(b&1) ans = (ans+a)%p;
       a = a * 2 % p;
       b>>=1;
    }
    cout<<ans<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/INnoVationv2/p/10293801.html

时间: 2024-10-15 03:16:48

64位整数乘法的相关文章

[位运算] 64位整数乘法(mod 一个数)

64位整数乘法 在部分题目中可能涉及到长整数(long long)的相关计算,可当我们需要将两个长整数相乘时有可能出现溢出的情况,这时候通常需要进行高精度计算,可如果我们需要将两个长整数相乘并 mod 一个数时高精度计算也就不太方便了,这时我们需要一个优秀的算法让我们快速的计算出类似 a×b mod c 的数值 [算法描述(1)] 我们用快速幂的思想,将b用二进制表示 b=ck-12k-1+ck-22k-2+-+c020 那么: a×b=a×(ck-12k-1+ck-22k-2+-+c020)=

【例题】64位整数乘法

题目地址 方法一 (口胡一下就好了啊) 快速幂思想的灵活运用. 把 \(b\) 用二进制表示 , 设 \(b\) 在二进制下有 \(k\) 位 , \(c_i\) 表示 \(b\) 在二进制下的第 \(i\) 位 \[b=c_{k-1}*2^{k-1}+c_{k-2}*2^{k-2}+...+c_{0}*2^{0}\] 根据加法原理,\(a*b\) 相当于 \(b\) 个 \(a\) 相加,现在把 \(b\) 用二进制表示,那么就有: \[a*b=c_{k-1}*2^{k-1}*a+c_{k-2

ACwing90 64位整数乘法 大数乘法取模

网址:https://www.acwing.com/problem/content/92/ 题解: 大数乘法取模模板. AC代码: #include <bits/stdc++.h> using namespace std; long long add(long long a, long long b, long long p) { long long res = 0; while (b) { if (b & 1) res = (res + a) % p; a = (a * 2) % p

90. 64位整数乘法

#include <iostream> using namespace std; int main() { long long a, b, p; cin >> a >> b >> p; long long res = 0; while(b) { if(b & 1) res = (res + a) % p; a = (a + a) % p; b >>= 1; } cout << res << endl; return

第三次作业 阅读程序有符号 64 位整数数据类型

这是一个C++程序,,,额,看着头痛(额,说实话,由于中间有一年多没上过学,再加上最开始也学的很一般,读起来累)不过什么东西慢慢来总能越来越好 问题一: 答: 首先Int64 i 是表示有符号 64 位整数数据类型,这个数i范围很大 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )....我表示大学这么几年,程序里面遇见这种情况的次数少 由此可见学校的东西和实际毕竟还是差距很大 然后看for循环 fo

16位整数,32位整数,64位整数

首先解释16位整数:所谓16位整数就是16个二进制位(16#7FFF)而对应的最大整数为32767:PLC中是用二进制的补码来表示有符号数的,定义最高位为符号位:当最高位位0时为正:最高位为1时为负;所以经过换算就是-701:(补码是正数先求反码(0变1:1变0)然后加1): 以次内推,32位,64位也是如此.

windows 64位整数

#include <iostream> #include <ctime> using namespace std; int main() { cout << sizeof(long) << endl;//4 cout << sizeof(long long) << endl;//8 cout << sizeof(__int64) << endl;//8 //time_t在64位上为__time64_t,为__i

64位BASM学习随笔(一)

?? Delphi的BASM一直是我最喜爱的内嵌汇编语言,同C/C++的内联汇编相比,它更方便,更具灵活性,因为C/C++的内联汇编只能是或插入式的汇编代码,函数花括号背后隐藏的函数框架,限制了汇编代码的发挥,如无论有无参数和局部变量,总是有个栈框架,更烦人的是只要你在函数中使用了esi,edi,ebx寄存器,就自动给你保存和恢复,使得这些寄存器没法在函数之间传递信息等:而Delphi的BASM可以是插入式的汇编代码,也可是完全的汇编方法,在完全的汇编方法下,怎么发挥就是自己的事了.    De

asp.net C# int 类型在32/64位环境下取值范围无变化

最近在学习中突然想到,我在64位环境下,int取值范围是否有变化?为了检测这个结果,我做了以下这个测试:1.环境:win7旗舰版64位+vs2010 sp1(版本号:10.0.40219.1SP1Rel)+.Net 4.0.30319 SP1Rel2.代码: 代码如下 复制代码 using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace ConsoleApplicatio