本文已参与「新人创作礼」活动,一起开启掘金创作之路。
@TOC
64位整数乘法
题目描述
求对取模的值
问题分析
先不考虑
类似于快速幂的思想,
因此:
也就是说如果的第位是,那么就等于;如果是,那么就等于
又有,而(表示向上取整),故时间复杂度为
所以每次取中的位(),每次都乘(),如果的这一位是就累加到中。
64位整数乘法模板
typedef long long ll;
ll mul(ll a, ll b, ll mod)
{
ll ans=0;
while(b)
{
if(b&1)
ans = (ans+a)%mod;
a = a*2%mod;
}
return ans;
}
AcWing-90. 64位整数乘法
Problem Description
求对取模的值
Tips
AC代码
/*
* @Author: LetMeFly
* @Date: 2021-07-26 18:44:35
* @LastEditors: LetMeFly
* @LastEditTime: 2021-07-26 18:50:06
*/
#include <bits/stdc++.h>
using namespace std;
#define mem(a) memset(a, 0, sizeof(a))
#define dbg(x) cout << #x << " = " << x << endl
#define fi(i, l, r) for (int i = l; i < r; i++)
#define cd(a) scanf("%d", &a)
typedef long long ll;
ll mul(ll a, ll b, ll mod)
{
ll ans = 0;
while (b)
{
if (b & 1)
ans = (ans + a) % mod;
a = a * 2 % mod;
b >>= 1;
}
return ans;
}
int main()
{
ll a, b, c;
cin >> a >> b >> c;
cout << mul(a, b, c) << endl;
return 0;
}
同步发文于我的CSDN,原创不易,转载请附上原文链接哦~
Tisfy:letmefly.blog.csdn.net/article/det…