Processing math: 100%

HDU6442(二项式)

要点

  • 懒得打公式了,题解
  • 把题目要求的复杂公式化简成熟悉的东西,一是看穿前面加个n!化为Cin,i;二是将奇数的条件去掉的数学技巧。
  • 形为(a+bB)n的快速幂
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

typedef long long ll;
int T;
ll A, B, n, p;
ll prime[1000005];

void Init() {
	for (int i = 1; i <= 1000; i++)
		for (int j = i * i; j <= (int)1e6; j += i * i)
			prime[j] = i;
}

ll ksm(ll a, ll b, ll n, ll mod) {
	ll res = 1, ret = 0;
	for (; n; n >>= 1) {
		if (n & 1) {
			ll t = res, p = ret;
			res = (t * a % mod + p * b % mod * B % mod) % mod;
			ret = (t * b % mod + p * a % mod) % mod;
		}
		ll tmp = a;
		a = (a * a % mod + b * b % mod * B % mod) % mod;
		b = 2LL * tmp % mod * b % mod;
	}
	return ret;
}

int main() {
	ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	Init();
	for (cin >> T; T--;) {
		cin >> A >> B >> n >> p;
		ll u = prime[B];
		B = B / (u * u);
		cout << 1 << " " << ksm(A, u, n, p) << " " << B << '\n';
	}
}
posted @   AlphaWA  阅读(220)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
点击右上角即可分享
微信分享提示