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. php精华之独孤九剑

    首先分享一个地址 https://segmentfault.com/a/1190000013696265(这个是主要的分享,人家作者写的非常棒

  2. PHP 代码规范、流程规范、git规范

    1. 命名规范 (1).变量命名规范 1.变量使用驼峰命名法 禁止使用拼音或者拼音加数字 2.变量也应具有描述性,杜绝一切拼音.或拼音英文混杂的命名方式 3.变量包数字.字母和下划线字符,不允许使用其 ...

  3. RNN-GRU-LSTM变体详解

    首先介绍一下 encoder-decoder 框架 中文叫做编码-解码器,它一个最抽象的模式可以用下图来展现出来: 这个框架模式可以看做是RNN的一个变种:N vs M,叫做Encoder-Decod ...

  4. POJ:3268-Silver Cow Party

    Silver Cow Party Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26184 Accepted: 11963 De ...

  5. 34-Cookie-based认证实现

    新建MVC项目,然后用VSCode打开 dotnet new mvc --name MvcCookieAuthSample 在Controllers文件夹下新建AdminController.cs u ...

  6. python基础之继承实现原理、子类调用父类的方法、封装

    继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...

  7. K-均值聚类——电影类型

    K-均值聚类 K-均值算法试图将一系列样本分割成K个不同的类簇(其中K是模型的输入参数),其形式化的目标函数称为类簇内的方差和(within cluster sum of squared errors ...

  8. Android面试收集录1 Activity+Service

    1.Activity的生命周期 1.1.首先查看一下Activity生命周期经典图片. 在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->on ...

  9. 内置函数--sorted,filter,map

    sorted() 排序函数. 语法: sorted(Iterable, key=None, reverse=False) Iterable: 可迭代对象;  key: 排序规则(排序函数); reve ...

  10. 容器技术Docker

    什么是decker容器 简单理解就是将代码和部署环境一起打包的一个容器