题形:另类快速幂

题意:

f(x) = K, x = 1

f(x) = (a*f(x-1) + b)%m , x > 1

Now, Your task is to calculate

( A^(f(1)) + A^(f(2)) + A^(f(3)) + ...... + A^(f(n)) ) modular P.

1 <= n <= 10^6

0 <= A, K, a, b <= 10^9

1 <= m, P <= 10^9

思路:

快速幂,求一个很快,但求多个,并不一定快。这里要求10^6次个,反而就很慢了。

所以,求单个的复杂度要比log(10^9)要小。

这里,有一个很棒的想法:用预处理换复杂度。

如果能算出A0~A10e9这么写所有,那么之后算单个复杂度就是1.很棒~当时预处理复杂度承受不了。

这里有个巧妙的方法:A10e10 = A10e5 * A10e5

所以,算出A0~A10e5,然后另B=A10e5, 算出B0~B10e5,之后算单个,复杂度就是2~棒!预处理复杂度被根号了~

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring> long long n, A, K, a, b, m, P;
long long p1[], p2[]; int main() {
int t;
scanf("%d", &t);
int cas = ;
while (t--) {
scanf("%lld%lld%lld%lld%lld%lld%lld", &n, &A, &K, &a, &b, &m, &P);
p1[] = ;
p1[] = A%P;
for (int i = ; i <= ; i++) {
p1[i] = (p1[i-]*p1[])%P;
}
p2[] = ;
p2[] = p1[];
for (int i = ; i <= ; i++) {
p2[i] = (p2[i-]*p2[])%P;
}
long long fx = K;
long long ans = ;
for (int i = ; i < n; i++) {
ans += p2[fx/]*p1[fx%];
ans %= P;
fx = (a*fx+b)%m;
} printf("Case #%d: %lld\n", cas++, ans);
}
return ;
}

最新文章

  1. 性能测试总结工作总结-基于WebService协议脚本 内置函数手动编写
  2. 最近Google经常打不开?
  3. Hamcrest
  4. backslash and newline separated by space
  5. Codeforces Round #336 (Div. 2) B. Hamming Distance Sum 计算答案贡献+前缀和
  6. 1_1准备工作[wp8特色开发与编程技巧]
  7. 通过示波器分析TypeB卡通讯数据
  8. 组合,关联,聚合的区别(转自http://jimmyleeee.blog.163.com/blog/static/9309618200932014422932/)
  9. myeclipse连接hadoop集群编程及问题解决
  10. Bootstrap模态弹出框
  11. [Java语言] 《struts2和spring MVC》的区别_动力节点
  12. jQuery插件开发的五种形态小结(转)
  13. CentOS无法使用ifconfig和root密码修改
  14. Python-Django&#160;第一个Django&#160;app
  15. canvas/CSS仪表盘效果
  16. Orchard Core 模块化
  17. Linux-(watch,at,crontab)
  18. 基于Jmeter跟Jenkins的自动化性能测试的一站式解决方案(转)
  19. 【免费培训】腾讯WeTest&amp;TesterHome WorkShop | 一起学压测
  20. 作业一:博客和Github简单练习

热门文章

  1. NOIP2013 乌龟棋
  2. nginx日志相关优化安全
  3. python入门:if和else的基本用法
  4. 如何用纯 CSS 创作一组昂首阔步的圆点
  5. 不使用脚手架的 vue 应用
  6. 使用TensorFlow的卷积神经网络识别手写数字(1)-预处理篇
  7. leetcode-11-dfs
  8. AreYouBusy HDU - 3535 (dp)
  9. CentOS 7.X 中systemctl命令用法详解
  10. Party Games UVA - 1610 贪心