P4296 [AHOI2007]密码箱

密码x大于等于0,且小于n,而x的平方除以n,得到的余数为1。

求这个密码,$1<=n<=2,000,000,000$

暴力枚举,数据有点儿水$O(nlogn)$,显然过不了$n<=10^9$

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath> #define LL long long
using namespace std; LL n;
bool flg=false; int main()
{
scanf("%lld",&n); for(int i=;;i++){
LL x=i*n+,p=sqrt(x);
if(p>n) break;
if(p*p==x){
flg=true;
printf("%lld\n",p);
}
}
if(!flg) return puts("None"),;
return ;
}

正解:

题目要求$x^x\mod n =1$,也就是求$n|(x^2-1^2)$,即$n|(x-1)\times(x+1)$,既然如此,考虑将$n$拆开,就有$n=a\times b$ $a|(x+1),b|(x-1)$或是$b|(x+1),a|(x-1)$

不妨设$a<b$,枚举$a$,同时枚举两种情况,优先队列+$STL$——$map$判重

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
#include<vector> #define LL long long
using namespace std; LL n;
bool flg=false; priority_queue<LL,vector<LL>,greater<LL> >Q;
map<LL,bool>M; int main()
{
scanf("%lld",&n);
int p=sqrt(n);
for(int i=;i<=p;i++){
if(n%i==){
int b=n/i;
for(int x=;x<=n;x+=b)//b|x-1
if((x+)%i==&&!M[x]) Q.push(x),M[x]=;
for(int x=b-;x<=n;x+=b)//b|x+1
if((x-)%i==&&!M[x]) Q.push(x),M[x]=;
}
}
while(!Q.empty()){
printf("%lld\n",Q.top());
Q.pop();
} return ;
}

或是$set$去重

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<queue>
#include<vector>
#include<set> #define LL long long
using namespace std; LL n;
bool flg=false; set<LL>S; int main()
{
scanf("%lld",&n);
int p=sqrt(n);
for(int i=;i<=p;i++){
if(n%i==){
int b=n/i;
for(int x=;x<=n;x+=b)//b|x-1
if((x+)%i==)
S.insert(x);
for(int x=b-;x<=n;x+=b)//b|x+1
if((x-)%i==)
S.insert(x);
}
}
while(!S.empty()){
printf("%lld\n",*S.begin());
S.erase(S.begin());
} return ;
}

貌似没有$None$的情况,即数据里不存在$n=1$

洛谷——P4296 [AHOI2007]密码箱的更多相关文章

  1. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  2. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  3. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  4. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  5. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  6. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

  7. 洛谷P1538迎春舞会之数字舞蹈

    题目背景 HNSDFZ的同学们为了庆祝春节,准备排练一场舞会. 题目描述 在越来越讲究合作的时代,人们注意的更多的不是个人物的舞姿,而是集体的排列. 为了配合每年的倒计时,同学们决定排出——“数字舞蹈 ...

  8. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  9. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

随机推荐

  1. Android原生音量控制【转】

    本文转载自:http://blog.csdn.net/u013082948/article/details/65630085 本文主要涉及AudioService.还是基于5.1.1版本的代码. Au ...

  2. iOS中打包.a静态库

    1.新建.a静态库工程 需要选择Static Library静态库工程模板新建工程,如下图: 新建静态库工程 实现需要打包的类,如下图: 实现需要打包的类 2.设置需要暴露的头文件 添加Headers ...

  3. flash、flex builder、flash builder、 air的关系

    flash VS flex builder flash被adobe收购的时候是flash8,已经可以AS2面向对象了. 而被adobe收购后,adobe准备把flash打造成一个开发工具.就比如JBU ...

  4. 雅礼集训 2017 Day1

    T1:loj 6029 市场 题目大意: 维护一个数据结构支持区间加 区间除法 区间求最小值 区间求和 思路: 用线段树维护区间加 区间求最小值 区间和 对于区间除法 注意到除数d很大而加法的w很小 ...

  5. 如何给自己的博客上添加个flash宠物插件

    最近在一些博主的博客上看到一些小宠物的挂件,很有趣,访客到了网站后可以耍耍小宠物,增加网站的趣味性,在功能强大的博客系统上看到有这样的小宠物挂件还是蛮有趣的. 多次差找资料后,终于在http://ww ...

  6. ASP.Net 下载大文件的实现 (转)

    原文:http://www.cnblogs.com/luisliu/p/4253815.html 当我们的网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃 ...

  7. EntityFramework:An error occurred while executing the command definition. See the inner exception for details.

    错误描述: 调用EF中的FirstOrDefault()时,报错误:An error occurred while executing the command definition. See the ...

  8. [笔试面试题] 10-C和C++区别相关

    1 C和C++有什么不同? 机制不同:C是面向过程的(但C也可以编写面向对象的程序):C++是面向对象的,提供了类.但是,C++编写面向对象的程序比C容易. 适用领域不同:C适合要求代码体积小的,效率 ...

  9. [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    Description N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色,每头牛有多种特色,用二进制01表示它的特色ID.比如特色ID为13(1101),则 ...

  10. ASP.NET文件操作

    在开发Web程序时,不但有存储在数据库中和XML文件中的数据形式需要处理,而且还有很多诸如文本.Word文档和图片等格式的文件数据需要处理.尤其是在一些信息管理系统中,文档的处理流程贯穿了整个系统的运 ...