博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[原]sdut2605 A^X mod P 山东省第四届ACM省赛(打表,快速幂模思想,哈希)
阅读量:5140 次
发布时间:2019-06-13

本文共 1912 字,大约阅读时间需要 6 分钟。

本文出自:

题意:

f(x) = K, x = 1

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

求出( 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

本题目的关键在于大幂的分解和。。你要这样想,因为不停的求A的幂,所以肯定把算过的保存下来最合适。

打表。(- -)每次都是打表,shit。

把f分解为 fix * k + j 的形式,f就是f(x)的简称。(哈希)

然后关键是fix怎么整,多少合适。我觉得33333合适。为啥?

因为10^9 / 33333 =30000数组不大。然后余数也在33333之内,其好,那就它吧。

然后就用普通的幂模相乘打表就可以f[i] = (f[i-1] * a)mod p,这是个简单的例子,a和p没有实际含义。

这个题目我在做的时候蛋疼到二分法动态打表,但是超空间,因为不停的递归调用造成了超空间。。但是我觉得如果能够实现。。用栈的方法,应该会更加节省时间。因为用到的才计算。如果有不同的意见,请回复我,谢谢。

AC代码:

//============================================================================// Name        : math.cpp// Author      : Vit// Version     :// Copyright   : Your copyright notice// Description : Hello World in C++, Ansi-style//============================================================================#include 
#include
#include
#include
using namespace std;#define lln long long int#define fix 33333//numlln n, A, K, a, b, m, P;//A^f f = fix * k + j// f = dp1 * k + dp2lln dpk[30001];lln dpj[33334];void init(){ int i, j; //init hash dpj[1] = A; dpj[0] = dpk[0] = 1; for(i = 2; i <= 33333; i++) dpj[i] = (dpj[i-1] * A) % P; dpk[1] = dpj[33333]; for(j = 1; j <= 30000; j ++) dpk[j] = (dpk[j-1] * dpk[1]) % P;}void ace(){ //work pit; int i, t, c; lln ans, f; scanf("%d", &t); for(c = 1; c <= t; c++) { scanf("%lld%lld%lld%lld%lld%lld%lld",&n, &A, &K, &a, &b, &m, &P); //init init(); f = K; ans = 0; for(i = 0; i < n; i++) { ans = (ans + dpk[f/fix] * dpj[f % fix]) % P; f = (a * f + b) % m; } printf("Case #%d: %lld\n", c, ans); }}int main(){ ace(); return 0;}

作者:svitter 发表于2014-5-5 21:26:29
阅读:161 评论:0

转载于:https://www.cnblogs.com/svitter/p/3724316.html

你可能感兴趣的文章
第23月第24天 git命令 .git-credentials git rm --cached git stash clear
查看>>
java SE :标准输入/输出
查看>>
[ JAVA编程 ] double类型计算精度丢失问题及解决方法
查看>>
好玩的-记最近玩的几个经典ipad ios游戏
查看>>
Sql Server 中由数字转换为指定长度的字符串
查看>>
tmux的简单快捷键
查看>>
[Swift]LeetCode922.按奇偶排序数组 II | Sort Array By Parity II
查看>>
php match_model的简单使用
查看>>
Vue_(组件通讯)子组件向父组件传值
查看>>
移动开发平台-应用之星app制作教程
查看>>
springboot No Identifier specified for entity的解决办法
查看>>
如何在maven工程中加载oracle驱动
查看>>
一句话说清分布式锁,进程锁,线程锁
查看>>
服务器解析请求的基本原理
查看>>
[HDU3683 Gomoku]
查看>>
下一代操作系统与软件
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>