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. input标签中的name

    <input>标签是java web的jsp页面中最常用的标签,特别是用来在页面和servlet中传递内容, 但是我们看到<input>标签中有很多内容,这边我们只提一下主要的 ...

  2. linux 下chown改变隐藏文件夹

    chown 在更改隐藏文件的时候,发现无法更改其用户组,如果需要将隐藏文件夹也做一个更改,那么需要加上-h选项. sudo  chown ai/node/  * -hR 使用以上命令即可.

  3. Charles Dickens【查尔斯·狄更斯】

    Charles Dickens In 1812, the year Charles Dickens was born, there were 66 novels published in Britai ...

  4. 笔记-python-standard library-16.3 time

    笔记-python-standard library-16.3 time 1.      time 1.1.    开始 time模块中时间表现的格式主要有三种: timestamp时间戳,时间戳表示 ...

  5. 如何将Windows live writer草稿转存到其他电脑上

    ref:http://www.zhengsiwei.com/how-to-draft-windows-live-writer-archived-on-other-computers/   在写一篇关于 ...

  6. saltstack执行远程命令

    目录 Remote Execution salt state salt state 系统 salt state 系统流程 Runner salt runner Orchestrate Runner S ...

  7. 为什么不要使用 Async Void ?

    原文:为什么不要使用 Async Void ? 问题 在使用 Abp 框架的后台作业时,当后台作业抛出异常,会导致整个程序崩溃.在 Abp 框架的底层执行后台作业的时候,有 try/catch 语句块 ...

  8. stm32--free modbus 1.5.0移植(作为从机)

    添加文件 获取原始free modbus library(官网) 将...\freemodbus-v1.5.0\demo\BARE中的所有文件复制到...\freemodbus-v1.5.0\modb ...

  9. WordCount 基础功能

    软测第一次作业 该项目在码云上的地址: https://gitee.com/zhege/WordCount 一,概述 WordCount的基础功能需求分析大致如下:对程序设计语言源文件统计字符数.单词 ...

  10. python 之发送邮件服务[原著] 海瑞博客

    Python 发送邮件 使用默认的django的发送邮件,只适用于单邮箱. 作者:海瑞博客 http://www.hairuinet.com/ setting中配置 # send e-mail EMA ...