90. 64位整数乘法

原题链接

根据快速幂的思想

b=(b1*1+b2*2+b3*4...+bn*2^n-1)

res=a*(b1*1+b2*2+...)

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;

int main()
{
    ll a,b,p;
    cin>>a>>b>>p;
    ll res=0;

    while(b)
    {
        if(b&1)
        {
            res=(res+a)%p;
        }
        b>>=1;
        a=a*2%p;
    }
    cout<<res%p;
    return 0;
}

应用模的定义出发

由于 a%b=a-(a/p)*p   (a/b是下取整)

那么 a*b%p=a*b-(a*b/p)*p

a*b和(a*b/p)*p 的差一定是在 0~p-1 之间的

如果res=a*b%p <0 res+=p;        

        res>=p res-=p;
 

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
    ll a,b,p;
    cin>>a>>b>>p;
    ll c=(long double)a*b/p;
    ll res=a*b-c*p;
    if(res<0) res+=p;
    else if (res>=p) res-=p;
    cout<<res;
    return 0;
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vivado软件中,可以通过使用Verilog或VHDL语言来设计四位整数乘法的仿真。 首先,我们需要定义输入和输出信号。对于四位整数乘法,我们需要两个4位的输入信号,分别表示乘法的两个操作数。我们还需要一个8位的输出信号,用于存储乘法运算的结果。 接下来,我们可以使用Vivado提供的乘法器原语或者使用组合逻辑来实现四位整数乘法。如果使用乘法器原语,需要连接输入和输出信号到乘法器的端口,并将乘法器的输出连接到输出信号。如果使用组合逻辑,可以使用适当的门电路和数据流程来实现乘法运算,并将结果存储到输出信号。 完成设计后,我们可以使用Vivado的仿真功能来验证乘法器的功能。在Vivado中,可以创建一个新的仿真文件,并使用仿真向导将设计文件和仿真文件相连。然后,我们可以设置输入信号的初始值,并运行仿真以观察输出信号的变化。通过检查输出信号的值,我们可以验证乘法器的正确性。 在仿真过程中,可以使用Vivado提供的调试工具来查看信号的波形图和时序图,以便更详细地分析乘法器的运行情况。此外,在仿真过程中,可以通过更改输入信号的值,来测试乘法器在不同情况下的性能和正确性。 总之,通过在Vivado中设计乘法器的仿真,我们可以验证乘法器的功能和正确性,以确保其在实际应用中的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值