位运算 - 六十四位整数乘法

Posted gufana

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算 - 六十四位整数乘法相关的知识,希望对你有一定的参考价值。

abp

取模的值。

输入格式

第一行输入整数a

,第二行输入整数b,第三行输入整数p

输出格式

输出一个整数,表示a*b mod p的值。

数据范围

1a,b,p1018

输入样例:

3
4
5

输出样例:

2

 

#include <stdio.h>
typedef unsigned long long ULL;
int main()
{
    ULL a,b,p;
    ULL res = 0;
    scanf("%llu%llu%llu",&a,&b,&p);
    while(b)
    {
        if(b&1)
            res = (res+a) % p;
        a = (a + a) %p;
        b >>= 1;
    }
    printf("%llu",res);
}

 

首先,其别名unsigned long long ULL

b&1 就是 判断b的最低位是否为1,如果为1,就加到res(最终结果);; 这里的b就是一个用二进制来判断 第几次方是否存在。

如 一次方  0000000....001  最低为一,说明 一次方存在

如果是 三的四次方 就是 00000000...100,开始循环a一直在加,到100时 加到结果上

b>>=1 是当前位处理过,就去掉该位

以上是关于位运算 - 六十四位整数乘法的主要内容,如果未能解决你的问题,请参考以下文章

每日一题 为了工作 2020 056 第六十四题

每日一题 为了工作 2020 056 第六十四题

四位乘法器的控制系统用啥模块

二进制八进制十进制十六进制六十四进制如何换算

高精度 四位压缩

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