BZOJ1406: [AHOI2007]密码箱 数论
Description
Input
Output
Sample Input
Sample Output
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]密码箱 数论相关推荐
- bzoj 1406: [AHOI2007]密码箱
1406: [AHOI2007]密码箱 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1629 Solved: 967 [Submit][Status ...
- BZOJ 1406 密码箱(数论)
很简洁的题目.求出x^2%n=1的所有x<=n的值. n<=2e9. 直接枚举x一定是超时的. 看看能不能化成有性质的式子. 有 (x+1)(x-1)%n==0,设n=a*b,那么一定有x ...
- 2019.5.summary
2019.5.1 CF C. Prefix Sum Primes 感觉CF就是训练妳如何养成对题目强大的YY能力的QAQ 我们构造 如果只有一种,没辙,只能这样放 否则先放一个2,再放一个1 接下来把 ...
- 算法笔记——数学相关
算法笔记--数学相关 高精度 乘法逆元 排列组合 二项式定理 质数的判定和应用 约数 拓展欧几里得 大步小步算法(BSGS) 拓展大步小步算法 快速乘和快速幂 矩阵相关 欧拉函数 欧拉定理及费马小定理 ...
- 【BZOJ1406】【codevs2478】密码箱,数论练习
传送门1 传送门2 写在前面:纯洁的污,还要恍然大污 思路: (感觉数论一段时间不做就找不到感觉了呢) 题意就是求x2≡1(mod n)x^2≡1(mod n)在[0,n]上所有的整数解 方程可化为( ...
- P4296-[AHOI2007]密码箱【数论】
正题 题目链接:https://www.luogu.com.cn/problem/P4296 题目大意 一个数字nnn,求有多少个x<nx<nx<n使得x2%n=1x^2\%n=1x ...
- 数论(一)——素数,GCD,LCM
这是一个数论系列:) 一.素数 ×费马小定理 Theorem: 设 p 是一个素数,a 是一个整数且不是 p 的倍数,那么 很遗憾,费马小定理的逆定理是不成立的.对 a = 2,满足的非素数 n 是存 ...
- 【数论总结】-----励志写好一篇数论总结↖(^ω^)↗//正在施工...未完工
近期学了学数论,来写一波总结吧. (1)排列组合,比较基础的东西了吧.//只写个概念吧,(逃: 概念:就是从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合: ...
- 解题报告(十八)数论题目泛做(Codeforces 难度:2000 ~ 3000 + )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...
最新文章
- 吴恩达:数据集的规模和学习机制都很重要!
- JAva入门 活着_java基础回顾
- dim private public static_PHP中const,static,public,private,protected的区别
- 子列表只是原列表的一个视图
- Technical Tcode List
- SharePoint Framework 企业向导(六)
- HTML之一天学会html(常用标签+网页架构)
- 电赛练习之旋转倒立摆PID调节
- QT 资源管理器和.qrc文件的使用
- iframe是什么?iframe用法详解。
- 深度学习数据增强方法-内含(亮度增强,对比度增强,旋转图图像,翻转图像,仿射变化扩充图像,错切变化扩充图像,HSV数据增强)七种方式进行增强-每种扩充一张实现7倍扩)+ 图像缩放代码-批量
- potentially fixable with the `--fix` option.
- python语句print(type(1j))的输出结果_Python 语句print(type(1J))的输出结果是:_学小易找答案...
- Scala之函数式编程
- 大学计算机科学与技术试题,大学计算机试题模拟卷3-大学教育计算机科学与技术类计算机及应用试卷与试题.pdf...
- java程序启动打印_JAVA打印问题:程序正常运行,打印机无反应
- illustrator插件-画板功能开发-插入页码-js脚本开发-ai插件
- 深度学习进阶课程10---减少Overfitting的方法Regularization
- 如何搭建ftp服务器
- vos3000 检测版本失败 网络连接失败 版本检验超时如何解决