c语言快速乘算法

2022-05-09  本文已影响0人  一路向后

1.基本原理

快速乘法的原理就是利用乘法分配率来将a*b转化为多个式子相加的形式求解(注意这时使用乘法分配率的时候后面的一个乘数转化为二进制的形式计算).举个栗子
  20*14 = 20*(1110)2 = 20*(2^3)*1 + 20*(22)*1+20*(21)*1+20*(2^0)*0 = 160+80+40=280.

2.源码实现

#include <stdio.h>
#include <stdlib.h>

int call(int a, int b, int p)
{
    int c = 0;

    while(b)
    {
        c = (c + b % 2 * a) % p;
        a = (a << 1) % p;
        b >>= 1;
    }

    return c;
}

int main()
{
    int n = -1;
    int a, b, p;
    int i;

    scanf("%d", &n);

    if(n < 1)
    {
        return -1;
    }

    for(i=0; i<n; i++)
    {
        scanf("%d %d %d", &a, &b, &p);

        printf("%d\n", call(a, b, p));
    }

    return 0;
}

3.编译源码

$ gcc -o test test.c -std=c89

4.运行及其结果

$ ./test
4
2 2 6
3 4 10
2 2 6
3 4 10
4
2
4
2
上一篇下一篇

猜你喜欢

热点阅读