Codevs 加密算法

本文介绍了密码学专家Rivest设计的一种基于特定数列的加密算法,通过数列E和密钥q将正整数n加密为d。给出的解题思路涉及斐波那契矩阵和快速幂运算,可用于解决数据加密问题。样例展示了算法的应用,并提到实际实现的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述 Description
Rivest是密码学专家。近日他正在研究一种数列E={E[1],E[2],……,E[n]},
且E[1]=E[2]=p(p为一个质数),E[i]=E[i-2]*E[i-1]
例如{2,2,4,8,32,256,8192,……}就是p=2的数列。在此基础上他又设计了一种加密
算法,该算法可以通过一个密钥q将一个正整数n加密成另外一个正整数d,计
算公式为:d=E[n] mod q。现在Rivest想对一组数据进行加密,但他对程序设计不太
感兴趣,请你帮助他设计一个数据加密程序。

输入描述 Input Description
读入m,p。其中m表示数据个数,p用来生成数列E。
以下有m行,每行有2个整数n,q。n为待加密数据,q为密钥。
m,p,n,q都在int内
输出描述 Output Description
将加密后的数据按顺序输出到文件a.out。
第i行输出第i个加密后的数据。

样例输入 Sample Input
2 7
4 5
4 6

样例输出 Sample Output
3
1

这道题恶心得不得了。。说做法也简单,就是bzoj3884: 上帝与集合的正确用法 加上斐波那契矩阵就解决了。但是实现起来不是一般的恶心。。利用斐波那契矩阵+降幂大法我们可以解决p^fib[i]的问题,那么剩下的我们只需要计算一个快速幂就得到了答案。(直接降幂大法递归(推)处理其实不用写矩阵<-比如我)不知道降幂大法的可以自行百度上帝与集合的正确用法,这里就不多做解释。。。。。(毕竟我懒)
安利一发博客

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值