T8116 密码

题目描述

YJC把核弹发射密码忘掉了……其实是密码被加密了,但是YJC不会解密。密码由n个数字组成,第i个数字被加密成了如下形式:第k小的满足(2^L)|(P-1)且P为质数的P。YJC希望你能帮他算出密码是多少。

输入输出格式

输入格式:

第一行包含一个整数n,表示密码中的数字个数。

接下来n行每行两个整数L和k,表示一个数字的加密形式。

注意,输入格式变更,请注意L和k的先后顺序

输出格式:

输出n行,第i行一个整数,表示第i个数字。

输入输出样例

输入样例#1:

2
21 92
23 9
输出样例#1:

1998585857
998244353

说明

对于50%的数据,满足18≤n,L≤1000。

对于100%的数据,满足12≤n,L≤500000,保证答案<2^31。

又是一道比赛写挂的题 发现自己比赛码代码很弱啊 这样可不行啊QAQ

————————————————————————————————————

讲一下这道题怎么写吧 首先我们并不需要找出1——2^31-1中的全部素数

因为我们发现我们需要的只是满足k*2^12+1的数就好了 所以我们可以在等差数列上筛质数

先弄出sqrt(末项)以内的质数 (为什么只要到sqrt这个很好证明吧)对每个质数,求出在等差数列上第一个整除位置,以及第二个 然后依次处理

那么要怎么做到在等差数列上筛呢

那么 我们的目标是找出质数p,求哪些a满足(4096a+1)%p==0对吧

4096a+1)%p==0
4096a+1==kp
(kp-1)%4096==0
kp==1(mod 4096)
k==p^(-1) (mod 4096)
于是k是(p模4096的逆元)+4096t,t为整数
为了4096a+1最小,直接取逆元
有了最小解,又gcd(p,4096)==1

——————————————————————

这里证明一下gcd(p,4096)==1

4096x+1=pk
pk-4096x=1
当gcd(p,4096)==1时有解

——————————————————————————
所以次小解=最小解+4096*p,以此类推然后就能筛完辣

剩下的都是满足(p-1)%2^12==0的辣

然后在2^12次方的基础上就能推出剩下的13——31的答案了

然后讲一下一些细节吧

qmod(i,2047,4096)这里是求质数i的逆元 qmod是快速幂 取最小正数解

至于为什么是i^2017%4096是因为

a^(-1)%b == a^(phi(p)-1)%p

而phi(4096)-1=2047
ed[i]表示4096*i+1是否已经被筛掉了 这里ed数组要开起码mx
至于mx怎么来的 2^31/2^12就是辣
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
#define un unsigned int
using namespace std;
const int mx=;
un read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
un n,k,l;
un cnt[],num[][];
un w[],f[],ed[];
un qmod(int a,int b,int c){
un ans=;
while(b){
if(b&) ans=ans*a%c;
b>>=; a=a*a%c;
}
return ans;
}
void prepare(){
w[]=; for(un i=;i<=;i++) w[i]=w[i-]*;
for(un i=;i<=;i++) if(!f[i]){
for(un j=i*;j<=;j+=i) f[j]=;
if(i==) continue;
if(i%==) num[][++cnt[]]=i;
for(un x=i*qmod(i,,)/;x<mx;x+=i) ed[x]=;
}
for(int i=;i<mx;++i) if(!ed[i]) num[][++cnt[]]=i*+;
for(un k=;k<=;k++)
for(un i=;i<=cnt[];i++)
if((num[][i]-)%w[k]==) num[k][++cnt[k]]=num[][i];
}
int main()
{
prepare();
n=read();
for(un i=;i<=n;i++){
l=read(); k=read();
printf("%d\n",num[l][k]);
}
return ;
}

洛谷T8116 密码的更多相关文章

  1. 洛谷T90444 密码 题解

    [问题描述] 假发通过了不懈的努力,得到了将军家门锁的密码(一串小写英文字母).但是假发被十四和猩猩他们盯上了,所以假发需要把密码传递出去.因为假发不想十四他们发现几松门前贴的小纸条就是将军家的密码, ...

  2. 洛谷 U6850 手机密码

    U6850 手机密码 题目背景 小明的手机上设了一个由四个数字组成的密码,但是小明自己的记性不好,但又不想把密码直接记在纸上,于是便想了一个方法. 题目描述 小明有四行数字,每行数字都有n[i](&l ...

  3. 洛谷 P1703 那个什么密码2

    P1703 那个什么密码2 题目背景 https://www.luogu.org/problem/show?pid=1079 题目描述 与原题一模一样.具体不同请见输入格式 输入输出格式 输入格式: ...

  4. 【洛谷】P5348 密码解锁

    [洛谷]P5348 密码解锁 很显然我们可以推导出这个式子 设\(a(m)\)为\(m\)位置的值 \[ \mu(m) = \sum_{m | d} a(d) \\ a(m) = \sum_{m|d} ...

  5. USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)

    usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...

  6. 洛谷P2922 [USACO008DEC] 秘密消息Secret Message [Trie树]

    洛谷传送门,BZOJ传送门 秘密消息Secret Message Description     贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息.     信息是二进制的,共有M(1≤M≤5 ...

  7. 【noip】跟着洛谷刷noip题2

    noip好难呀. 上一个感觉有点长了,重开一个. 36.Vigenère 密码 粘个Openjudge上的代码 #include<cstdio> #include<iostream& ...

  8. BZOJ5259/洛谷P4747: [Cerc2017]区间

    BZOJ5259/洛谷P4747: [Cerc2017]区间 2019.8.5 [HZOI]NOIP模拟测试13 C.优美序列 思维好题,然而当成NOIP模拟题↑真的好吗... 洛谷和BZOJ都有,就 ...

  9. [洛谷日报#204] StackEdit——Markdown 编辑器的功能介绍

    本文同时发表于洛谷日报,您也可以通过洛谷博客进行查看. 1.介绍与开始使用 1.1 这是什么? StackEdit是基于PageDown.Stack Overflow和其他堆栈交换站点使用的Markd ...

随机推荐

  1. RESTful API架构和oauth2.0认证机制(概念版)

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  2. SpringMVC使用注解@RequestMapping映射请求

    pringMVC通过使用@RequestMapping注解,实现指定控制器可以处理哪些URL请求. 控制器的类定义及方法定义处都可以标注@RequestMapping: 类定义处:提供初步的请求映射信 ...

  3. gcc常用命令

    1简介 2简单编译 2.1预处理 2.2编译为汇编代码(Compilation) 2.3汇编(Assembly) 2.4连接(Linking) 3多个程序文件的编译 4检错 5库文件连接 5.1编译成 ...

  4. The GNU C Library

    Any Unix-like operating system needs a C library: the library which defines the ``system calls'' and ...

  5. 如何在一个顶级域名下用两个二级域名访问vps下的两个项目网站--完美解决骗

    本人是原址是http://www.webzhe.com/server/340 后经过本人的实践修改,增加截图,等具体的步骤,完美解决 如何在vps中设置二级域名开通子网站,这个问题涉及到两步:一首先要 ...

  6. Erlang OTP设计原则Gen_Fsm行为[转]

    转自: http://www.cnblogs.com/yourihua/archive/2012/05/13/2497776.html 1. Fsm 称为 有限状态机,举个例子,游戏中的怪物称为NPC ...

  7. 恢复误删除表黑科技之relay log大法(续)

      Preface       I've stuck twice in my previous experiments in backing up dropped tables.I am still ...

  8. Python 3基础教程13-写入文件

    前面介绍了函数,这篇我们就利用Python 内构函数open来写入字符串到txt文件里. 直接看demo.py 这里有一个小问题,如果我要输入时中文到txt文件会报unicode错误,暂时没法解决.

  9. Opencv4.0.0安装包

    这个资源是Opencv4.0.0安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载

  10. HDU 4714 Tree2cycle 找规律

    假设最少删除的边的个数为cost,显然,最终答案即为cost+cost+1 (因为删除一条边,就会增加一个链,所以删除cost条边后,就会有cost+1条链,将这cost+1条链连接起来的代价为cos ...