Description

在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示。经过艰苦的破译,小可可发现,这些图标表示一个数以及这个数与密码的关系。假设这个数是n,密码为x,那么可以得到如下表述: 密码x大于等于0,且小于n,而x的平方除以n,得到的余数为1。 小可可知道满足上述条件的x可能不止一个,所以一定要把所有满足条件的x计算出来,密码肯定就在其中。计算的过程是很艰苦的,你能否编写一个程序来帮助小可可呢?(题中x,n均为正整数)

Input

输入文件只有一行,且只有一个数字n(1<=n<=2,000,000,000)。

Output

你的程序需要找到所有满足前面所描述条件的x,如果不存在这样的x,你的程序只需输出一行“None”(引号不输出),否则请按照从小到大的顺序输出这些x,每行一个数。

Sample Input

12

Sample Output

1
5
7
11

Solution

首先考虑怎么去掉这个mod

$$x^2\ mod\ n\ =\ 1 $$

可以化为

$$kn=x^2-1$$

$$kn=(x+1)(x-1)$$

即$$n|(x+1)(x-1)$$

所以枚举$n$的因数来算就好,注意要枚举大因数,小因数TLE的很惨...

可以拿set来存答案也可以最后把答案排序一遍

#include <bits/stdc++.h>#define ll long long
#define inf 0x3f3f3f3f
#define il inlinenamespace io {#define in(a) a=read()#define out(a) write(a)#define outn(a) out(a),putchar('\n')#define I_int llinline I_int read() {I_int x = 0 , f = 1 ; char c = getchar() ;while( c < '0' || c > '9' ) { if( c == '-' ) f = -1 ; c = getchar() ; }while( c >= '0' && c <= '9' ) { x = x * 10 + c - '0' ; c = getchar() ; }return x * f ;}char F[ 200 ] ;inline void write( I_int x ) {I_int tmp = x > 0 ? x : -x ;if( x < 0 ) putchar( '-' ) ;int cnt = 0 ;while( tmp > 0 ) {F[ cnt ++ ] = tmp % 10 + '0' ;tmp /= 10 ;}while( cnt > 0 ) putchar( F[ -- cnt ] ) ;}#undef I_int}
using namespace io ;using namespace std ;#define N 100010//x^2 mod n = 1
//kn = x^2 - 1
//n | x^2 - 1
//n | (x+1)(x-1) 

ll n = read() ;
ll st[ N ] ;
int top = 0 ;
int cnt[ N ] ;int main() {for( ll i = 1 ; i * i <= n ; i ++ ) {if( n % i == 0 ) {st[ ++ top ] = n / i ;}}int tot = 0 ;while( top ) {ll tmp = st[ top ] ;for( ; tmp <= n ; tmp += st[ top ] ) {if( ( tmp - 2 ) % ( n / st[ top ] ) == 0 ) cnt[ ++ tot ] = ( tmp - 1 ) % n ;if( ( tmp + 2 ) % ( n / st[ top ] ) == 0 ) cnt[ ++ tot ] = ( tmp + 1 ) % n ;}top -- ;}if( !tot ) puts("None") ;else {sort( cnt + 1 , cnt + tot + 1 ) ;for( int i = 1 ; i <= tot ; i ++ ) {if( cnt[ i ] != cnt[ i - 1 ] ) outn( cnt[ i ] ) ;}}return 0 ;
}

转载于:https://www.cnblogs.com/henry-1202/p/BZOJ1406.html

BZOJ1406: [AHOI2007]密码箱 数论相关推荐

  1. bzoj 1406: [AHOI2007]密码箱

    1406: [AHOI2007]密码箱 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1629  Solved: 967 [Submit][Status ...

  2. BZOJ 1406 密码箱(数论)

    很简洁的题目.求出x^2%n=1的所有x<=n的值. n<=2e9. 直接枚举x一定是超时的. 看看能不能化成有性质的式子. 有 (x+1)(x-1)%n==0,设n=a*b,那么一定有x ...

  3. 2019.5.summary

    2019.5.1 CF C. Prefix Sum Primes 感觉CF就是训练妳如何养成对题目强大的YY能力的QAQ 我们构造 如果只有一种,没辙,只能这样放 否则先放一个2,再放一个1 接下来把 ...

  4. 算法笔记——数学相关

    算法笔记--数学相关 高精度 乘法逆元 排列组合 二项式定理 质数的判定和应用 约数 拓展欧几里得 大步小步算法(BSGS) 拓展大步小步算法 快速乘和快速幂 矩阵相关 欧拉函数 欧拉定理及费马小定理 ...

  5. 【BZOJ1406】【codevs2478】密码箱,数论练习

    传送门1 传送门2 写在前面:纯洁的污,还要恍然大污 思路: (感觉数论一段时间不做就找不到感觉了呢) 题意就是求x2≡1(mod n)x^2≡1(mod n)在[0,n]上所有的整数解 方程可化为( ...

  6. P4296-[AHOI2007]密码箱【数论】

    正题 题目链接:https://www.luogu.com.cn/problem/P4296 题目大意 一个数字nnn,求有多少个x<nx<nx<n使得x2%n=1x^2\%n=1x ...

  7. 数论(一)——素数,GCD,LCM

    这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...

  8. 【数论总结】-----励志写好一篇数论总结↖(^ω^)↗//正在施工...未完工

    近期学了学数论,来写一波总结吧. (1)排列组合,比较基础的东西了吧.//只写个概念吧,(逃: 概念:就是从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合: ...

  9. 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

最新文章

  1. 吴恩达:数据集的规模和学习机制都很重要!
  2. JAva入门 活着_java基础回顾
  3. dim private public static_PHP中const,static,public,private,protected的区别
  4. 子列表只是原列表的一个视图
  5. Technical Tcode List
  6. SharePoint Framework 企业向导(六)
  7. HTML之一天学会html(常用标签+网页架构)
  8. 电赛练习之旋转倒立摆PID调节
  9. QT 资源管理器和.qrc文件的使用
  10. iframe是什么?iframe用法详解。
  11. 深度学习数据增强方法-内含(亮度增强,对比度增强,旋转图图像,翻转图像,仿射变化扩充图像,错切变化扩充图像,HSV数据增强)七种方式进行增强-每种扩充一张实现7倍扩)+ 图像缩放代码-批量
  12. potentially fixable with the `--fix` option.
  13. python语句print(type(1j))的输出结果_Python 语句print(type(1J))的输出结果是:_学小易找答案...
  14. Scala之函数式编程
  15. 大学计算机科学与技术试题,大学计算机试题模拟卷3-大学教育计算机科学与技术类计算机及应用试卷与试题.pdf...
  16. java程序启动打印_JAVA打印问题:程序正常运行,打印机无反应
  17. illustrator插件-画板功能开发-插入页码-js脚本开发-ai插件
  18. 深度学习进阶课程10---减少Overfitting的方法Regularization
  19. 如何搭建ftp服务器
  20. vos3000 检测版本失败 网络连接失败 版本检验超时如何解决

热门文章

  1. 未来3年,大数据市场规模将达到万亿元
  2. 亚马逊正发力人工智能
  3. 基于mysql 5.5+mysql-master-ha实现mysql ha架构
  4. eclipse 鲜为人知的调试技巧,你用过多少
  5. Trunk Club:颠覆男士时装零售的创业公司_第1页_福布斯中文网
  6. 雷人的调查:荷兰女性的安全意识
  7. 磁盘阵列简介---图片说明
  8. 计算机无法安装系统,为什么计算机无法重新安装系统?
  9. Linux下matlab断点调试
  10. 【正一专栏】新赛季欧冠小组赛猜想