处理两数相乘的黑科技

黑科技来源

我们发现如果两个数都接近long long,乘起来就爆掉了,那该怎么办。

黑科技内容

快速乘
简介

这个应该是白科技。
虽然叫快速乘,但是十分的慢。
速度比快速幂多一个log 。
比如说是a*b,我们设f(i)=a*i
那么把b拆一下,f(b)=f(b/2) * 2+a *(b mod 2)
递归的做

Code
ll qsc(ll x,ll y){
    ll z=0;
    if(y==0)return z;
    z=qsc(x,y/2);
    z=z*2%m;
    if(y%2==1)z=(z+x)%m;
    return z;
}
黑科技1号
简介

速度很快。
假如要把x和y相乘
我们把x,y分成x/p,x%p,y/p,y%p,p是一个很大的数,用来把大数分开,然后x=(x/p+x%p),y=(y/p+y%p),然后再用乘法分配律把答案算出来。
思想就是把一个数拆成两个数。

Code
ll qsc(ll x,ll y){
    ll a1=x/1000000,a2=x%1000000,b1=y/1000000,b2=y%1000000,z=0;
    z=(a1*b1%mo*1000000%mo*1000000%mo);
    z=(z+a1*b2%mo*1000000%mo);
    z=(z+a2*b2%mo);
    z=(z+a2*b1%mo*1000000%mo);
    return z%mo;
}
黑科技2号
简介

速度也很快。
思想是double可以处理很大的数,然后把long long的数强制转成double的,然后在强制转回来就可以了。
数太大了,很能有精度问题。
所以我还是推荐黑科技1号

Code

来自Yves___的博客long long相乘取模黑科技

LL mult( LL A, LL B, LL Mo )
{
    LL temp = ( ( LL ) ( ( db ) A*B/Mo+1e-6 ) * Mo );
    return A*B - temp;
}

黑科技应用

随机数生成器
WYF的盒子

A. 小 X 与位运算(bignum) 题目描述 自从上次小 X 搞定了完美数之后, 他最近在研究一项和计算机密切相关的科技。要知道在计算机的内部,数据都是以二进制的形式来进行存储的,而它使用的计算方法也和我们平时的加减乘除四则运算有所不同, 它使用的是位运算。那什么是位运算呢? 基础位运算有三种符号,分别是 and, or, xor(分别对应 pascal 中的 and, or, xor 三种运算符号)。 以 and 为例,两个二进制数在做 and 运算时,分别对两个二进制数的每一位做 and 运算。而对每一位做 and 运算时, 遵守以下规则:只有当两个数的这一位都是 1 时,运算结果才为 1, 否则就是 0。 例如 1101 和 10101 做 and 运算之后结果为 101(高位不足用 0 补齐,最后结果忽略前导 0)。 通俗点讲 and 运算就是按位做乘法, 即将两个二进制数从高位到低位依次对齐,然后每一位上对齐的两个相乘即得到这一位的结果 。 我们可以列一个简单的竖式来拟这个 and 运算: 01101 and 10101 ---------------- 00101 结果 00101 最左边的两个 0 即为前导 0,前导 0 一般要忽略。 而 or, xor 的运算方法类似, 唯一不同的是在对每一位做运算时遵循的方法不同。 or 运算遵守以下规则:只 有当两个数的这一位都是 0 时,运算结果才为 0, 否则就是 1。 例如 1101和 10101 做 or 运算之后结果为 11101 01101 or 10101 -------------- 11101 xor 运算遵守以下规则:只有当两个数的这一位相同时,运算结果才为 0, 否则就是 1。 例如 1101 和10101 做 xor 运算之后结果为 11000 01101 xor 10101 --------------- 11000 我们可以用一张简单的表格来说明三种位运算的运算规则 小 X 当然不会满足于最简单的位运算了。小 X 想知道两个很大很大的二进制数,在做完位运算之后,最后的结果是什么。而小 X 自己无法知道正确答案是什么, 他只好求助于你来帮助他解决这个问题。
最新发布
04-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值