题目链接 : https://www.luogu.org/problemnew/show/T33159
【题目背景】
模拟只会猜题意 贪心只能过样例
数学上来先打表 一般看规律
图论强行套模板 数论只会
递归递推伤不起 搜索茫然
【题目描述】
可怜的蒟蒻小Z只会做gcd的水题。看,他翻开了一道例题:
求 的值。
可是他被数据规模吓到了。你能帮帮他吗?
【输入格式】
第一行一个整数 ,代表有 组数据。
接下来 行,每行两个整数 。
【输出格式】
输出共 行,每行一个整数,为你的答案,模 输出。
【输入样例】
3
44885 1
65408 3
50979 2
【输出样例】
784589800
496682893
156958624
【数据规模】
【题目来源】
首先,本题为三合一(逃
【第一题】 ACM/ICPC Dalian2011 The boss on Mars
题目描述:求 的值。对 取模输出。
数据规模: ,有多组数据。
题解: 进行质因数分解,得到最多 个质因子。然后将前 个四次方和减去与 不互质的四次方之和。
多减去的问题,应该考虑容斥原理。
含有因子 时,计算与 不互质的数 ,个数为 。提出公因数 后,发现是一个四次方和公式,手推即可。
时间复杂度: 。
【第二题】 Codeforces 622F The Sum of the k-th Powers
题目描述:求 的值。对 取模输出。
数据规模: ,仅一组数据。
题解:易知答案为
次多项式。所以我们需要进行朗格拉日插值。
首先算出 的前缀和,共 项。可以计算 个点 确定出多项式。
答案为 。
然后就是将前缀和带入,手推公式。
时间复杂度: 或 。
参考:http://aequa.me/index.php/2018/02/01/powersum-linear/
当然要写O(k log k)我也卡不掉(逃
【第三题】 洛谷6月月赛「数学」约数个数和
题目描述:求 的 (所有约数的)× 的约数个数和。对 取模输出。
数据规模: ,仅一组数据。
题解:手推公式,发现需要质因数分解,把结果扔进组合数。
组合数可以线性递推,所以质因数分解成了关键。
质因数分解交给 , 。
不会这个?那么 分只能拿到 分。
算法 的讲解:
设 。其中 互质。最坏的情况就是, 都是质数。
随机从 中选出一些数 ,刚好是 或 的概率很小。但如果是 呢?
因为 ,因数 都很难找到,但是 的倍数就很多了!
中 的倍数有 ,一共 个。 的倍数有 ,一共 个。合起来再扣除两个 ,得到有 个数,概率为 。任意试验 次,就有 的概率会成功。
坑点: 时要特判。
find_factor (n){
if ( n == 1 ) return ;
if ( Miller-Rabin(n) ){ // n 是一个质数
primelist.add(n);
return;
}
p1=rand(),p2=rand(); // 也可以换成其它数字
while (1) { // 记得判断环
p2=function(p1); // function 为伪随机数函数
q=gcd(n,abs(p1-p2));
if (q!=1){ // 找到一个约数了!
find_factor(q);
find_factor(n/q); // 两边递归分解
return;
}
p1=p2;
}
}
当然,这里使用 的空间产生随机数,只需要存连续两次的随机数种子。记得注意随机数周期循环问题。
时间复杂度: 。
然而我并不会证明(逃
【部分分讲解】
第 个测试点只需要模拟 + 快速幂暴力即可。
当 时,问题为计算 。
当 时,问题为计算 。
计算 公式如下:若 ,则答案为 。
【真正的题解】
第一题的 次方换成 次方时,把第二题的朗格拉日插值替换掉四次方和公式。
最后,质因数分解使用 与 算法。
时间复杂度: 。