c语言1e12用long long可以吗,2116: 简简单单的数学题(快速幂||爆longlong处理)

懒得打字的yzj丢了道简单的数学题。 ⌊a⌋ +⌈b⌉+c(四舍五入)+d^n; (d^n表示d的n次方)。 解释一下 就是a向下取整 b向上取整 c四舍五入的和加上d的n次方

输入

第一行3个数 a,b,c。0

第二行一个数q 表示q次查询 q<=2e5

每次查询2个整数 d,n。 0

输出

每次查询输出一个答案(取模1e12);

样例输入

1.9 2.1 2.2

1

2 2

样例输出

10

爆longlong三种处理方式

1.__int128 此类型只能在Linux上编译,本地编译不了,但可ac

2.将1e12的数分开乘

快速版本:

乘法优化成两部分:

大于1e6以及小于1e6的分开

p=1e6;

(((x*(y/p))%mod)*p)%mod+(x*(y%p))%mod;

龟速版本:

化成对应二进制一位一位的乘(此题tle)

ll ans = 0;

while(b) {

if(b & 1) ans = (ans + a ) ;

if(ans>mod) ans%=mod;

b >>= 1;

a<<=1;

if(a>mod) a%=mod;

}

3.转化成long double(最强)

0003f685c2b02c9f1fb560a264cf5b70.png

简化:

(x*y-(ll)((long double)x*y/mod)*mod+mod)%mod;

#include

#define fi first

#define se second

#define log2(a) log(n)/log(2)

#define show(a) cout<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值