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. 【Sklearn系列】使用Sklearn进行数据预处理

    这篇文章主要讲解使用Sklearn进行数据预处理,我们使用Kaggle中泰坦尼克号事件的数据作为样本. 读取数据并创建数据表格,查看数据相关信息 import pandas as pd import ...

  2. 003---wsgi和wsgiref模块

    WSGI: 全称:Web Server Gatway Interface ,web服务网关接口,独立的,与django无关,他们俩只是遵循一个约定,是一个协议. wsgiref模块: 实现了WSGI协 ...

  3. G - Dreamoon and NightMarket Gym - 101234G 优先队列+思路

    题目:题目链接 题意:给出n种食物,食物有自己的价格并且可以自由搭配,每天吃之前没吃过的花费最少的搭配,问第k天的花费. 思路:第k小我们考虑用优先队列处理,虽然n比较大,但由于1 ≤ K ≤ min ...

  4. POJ:3684-Physics Experiment(弹性碰撞)

    Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3392 Accepted: 1177 Sp ...

  5. [Uva11178]Morley's Theorem(计算几何)

    Description 题目链接 Solution 计算几何入门题 只要求出三角形DEF的一个点就能推出其他两个点 把一条边往内旋转a/3度得到一条射线,再做一条交点就是了 Code #include ...

  6. 笔记-scrapy-extentions

    笔记-scrapy-extentions 1.      extentions 1.1.    开始 The extensions framework provides a mechanism for ...

  7. RelativeLayout 深入理解

    今天做app底部的导航栏,就是会有一个分割线,分割内容和下面的fragmenttablehost,那条线,我看开源中国是用relativelayout包裹的. 我也包裹,但是不行.显示不出来那条线. ...

  8. Java算法求最大最小值,倒序,冒泡排序,斐波纳契数列,日历一些经典算法

    一,求最大,最小值 int[] a={21,31,4,2,766,345,2,34}; //这里防止数组中有负数,所以初始化的时候给的数组中的第一个数. int max=a[0]; int min=a ...

  9. [转]多多“亦”善:把大量内容放到一页PPT的5个技巧

    技巧一:利用灰色“隐蔽”内容 灰色有个好处:自动成为“备胎”,在“现任”被浏览后才会被注意到.所以使用灰色能够让页面内容看起来没那么多. 技巧二:对齐和亲密 这是排版的两个原则. 对齐是指对页面上的元 ...

  10. 【Support Vector Regression】林轩田机器学习技法

    上节课讲了Kernel的技巧如何应用到Logistic Regression中.核心是L2 regularized的error形式的linear model是可以应用Kernel技巧的. 这一节,继续 ...