LA 4998简单加密游戏 —— 自相似性质&&不动点迭代
题意
输入正整数 $K_1$($K_1 \leq 50000$),找一个12为正整数 $K_2$(不能含有前导0)使得 ${K_1}^{K_2} \equiv K_2(mod \ {10}^{12})$。例如 $K_1=99$,$K_2=817 \ 245\ 479\ 899\ $.
分析
1、利用自相似性质
如果 ${K_1}^{K_2} \equiv K_2(mod \ {10}^{12})$,那么有 ${K_1}^{K_2 \% {10}^i} \equiv K_2\% {10}^i(mod \ {10}^{i}), \ i \leq 12$.
因此可以dfs从后往前一位一位得到。
考虑到不能含有前导0,可以求到13位,并要求大于等于1e12,答案再模1e12,这样就不会出现前导0.
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll mod = 1e12;
ll K1, K2;
ll w[], ans; ll quickmul(ll a,ll b,ll mod) {
ll ite = (1LL<<)-;
return (a*(b>>)%mod*(1ll<<)%mod+a*(b&(ite))%mod)%mod;
} ll qpow(ll a, ll b, ll mod)
{
ll ret = ;
while(b)
{
if(b&) ret = quickmul(ret, a, mod);
a = quickmul(a, a, mod);
b >>= ;
}
return ret;
} bool dfs(int cur, ll now)
{
if(cur == )
{
if(now >= w[]){ans = now; return true;}
return false;
}
ll W = w[cur];
for(int i = ;i <= ;i++)
{
ll tmp = W*i + now;
if(qpow(K1, tmp, W) == (tmp%W))
{
if(dfs(cur+, tmp)) return true;
}
}
return false;
} int main()
{
int kase = ;
w[] = ;
for(int i = ;i < ;i++) w[i] = w[i-] * ;
while(scanf("%lld", &K1) == &&K1)
{
dfs(, );
printf("Case %d: Public Key = %lld Private Key = %lld\n", ++kase, K1, ans%mod);
}
}
2、不动点迭代
初始时随机选取一个超过10^12的数,如1000000000007,将其代入计算,如果f(x)!=x,那么令x=f(x),如此循环,能在短时间内找出合法解。
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll mod = 1e12;
ll K1, K2; ll quickmul(ll a,ll b,ll mod) {
ll ite = (1LL<<)-;
return (a*(b>>)%mod*(1ll<<)%mod+a*(b&(ite))%mod)%mod;
} ll qpow(ll a, ll b, ll mod)
{
ll ret = ;
while(b)
{
if(b&) ret = quickmul(ret, a, mod);
a = quickmul(a, a, mod);
b >>= ;
}
return ret;
} int main()
{
int kase = ;
while(scanf("%lld", &K1) == &&K1)
{
K2 = 1e11+;
while(qpow(K1, K2, mod) != K2%mod) K2 = qpow(K1, K2, mod);
printf("Case %d: Public Key = %lld Private Key = %lld\n", ++kase, K1, K2);
}
}
参考链接:
1. http://www.bubuko.com/infodetail-587732.html
2. https://blog.csdn.net/w4149/article/details/77750279
LA 4998简单加密游戏 —— 自相似性质&&不动点迭代的更多相关文章
- 用C语言简单加密解密
使用char表示的字符型数据,在本质上与我们前面介绍的整型数据并无太大的区别,只是char类型占用的内存字节数更小,能够表示的数据范围更小而已.在使用上,char被专门用来表示C语言的字符集中的各种字 ...
- Android简单加密保护自有图片资源
现在大部分android应用的图片资源,被反编译后就可以直接拿来用,如果不想让自己的图片资源直接被反编译后使用,首先想到的应该是把图片加密.这里笔者抛砖引玉,草草写了一个对图片进行简单加密的方法,希望 ...
- 信息安全系统设计基础课程实践:简单TUI游戏设计
简单TUI游戏设计 目 录 一 Curses库简介与基本开发方法 ...
- 一款简单射击游戏IOS源码
源码描述: 一款基于cocos2d的简单设计游戏,并且也是一款基于cocos2d的简单射击游戏(含苹果IAD广告), 游戏操作很简单,哪个数字大就点击射击哪个.里面有苹果iad广告,功能简单完整,适合 ...
- 怎样用HTML5 Canvas制作一个简单的游戏
原文连接: How To Make A Simple HTML5 Canvas Game 自从我制作了一些HTML5游戏(例如Crypt Run)后,我收到了很多建议,要求我写一篇关于怎样利用HTML ...
- Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状)
Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状) 本篇博客来给大家介绍怎样使用Lua这门语言来开发一个简单的小游戏-记数字踩白块. 游戏的流程是这种:在界面上生成5个数1~5字并显 ...
- [android游戏开发初学]简单的游戏框架
这两天,没事想学习游戏开发,看了一些资料之后准备开始.为了将来编码方便,先写了一个简单的游戏框架方便自己以后做练习用. 如果以后没有什么特殊的需求--比如opengl什么的,会尽量用这个简单框架来实现 ...
- 简单Elixir游戏服务器开篇
以前的Elixir游戏服设计系列种种原因没有完成. 后来虽然用Elixir + riak 完成了一个麻将的初始版本,可惜公司也挂了. 现在到新公司,比较空闲,想着像完成一个心愿一样,还是重启下吧(希望 ...
- 5、使用Libgdx设计一个简单的游戏------雨滴
(原文:http://www.libgdx.cn/topic/49/5-%E4%BD%BF%E7%94%A8libgdx%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E7% ...
随机推荐
- 小程序根据数字做for循环
笔记:小程序根据具体一个数值做for循环 n为想循环的次数 <view wx:for="{{n - 0}}"> <text>{{index}}</te ...
- springcloud(五,多个服务注册中心eureka)
spring cloud (一.服务注册demo_eureka) spring cloud (二.服务注册安全demo_eureka) spring cloud (三.服务提供者demo_provid ...
- (六)golang--变量
什么是变量? 变量相当于内存空间中一个数据存储空间的表示,可以理解为一个门的房牌号:该区域有自己的名称(变量名)和类型(数据类型) 变量的使用步骤:申明--赋值--使用 package main im ...
- SpringBoot第十五篇:swagger构建优雅文档
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11007470.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前面的十四 ...
- 用友U8根据客户简称/供应商简称的拼音首字母生成助记码
用友U8+中,客户档案和供应商档案可以设置自动生成助记码,但软件只能自动根据客户全称/供应商全称生成助记码,而无法选择按简称生成助记码,这显然十分不方便,可以通过如下方式解决: 修改步骤 1.往数据库 ...
- root账号无法上传文件到Linux服务器
普通权限的账号,通过ftp工具,可以正常连上Linux服务器,可以正常上传文件.但是root账号却无法上传文件. 网上搜了半天才知道,默认情况下vsftp是不允许root用户登录的,可以通过修改限制来 ...
- jQuery学习路线&review
学习途径:http://www.w3school.com.cn/jquery/index.asp 路线图 转载自:https://www.cnblogs.com/lanren2017/p/723720 ...
- 部门工资前三高的所有员工 - LeetCode
Employee 表包含所有员工信息,每个员工有其对应的工号 Id,姓名 Name,工资 Salary 和部门编号 DepartmentId . +----+-------+--------+---- ...
- HTML5新标签和CSS伪类
HTML5提供了很多新的标签,由于HTML5的兼容性比较差,HTML5的标签常用于手机端 <nav> <footer> <section> <header&g ...
- c#页面重定向,Server.Transfer 和 Response.Redirect
Server.Transfer() 重定向发生在服务器端,把处理的控制权从当前页面转移到另一个页面,在转移的工程中没有离开服务器内部控件(如request,session等)保存的信息不变. 1.只能 ...