【BZOJ1406】【codevs2478】密码箱,数论练习
来源:互联网 发布:建筑方案设计软件 编辑:程序博客网 时间:2024/05/20 19:30
传送门1
传送门2
写在前面:纯洁的污,还要恍然大污
思路:
(感觉数论一段时间不做就找不到感觉了呢)
题意就是求
方程可化为
即
令
反过来说也是成立的
(至于证明,我们可以n与(x+1)(x-1)质因数分解,则{n的质因子}⊆{x+1的质因子}∪{x-1的质因子},而n的因子是(1,n)或质因子乘起来的,所以一定能找出一对符合条件的(a,b))
这样一来我们就比较容易地做到两件事,一是说明当n=1时无解(不可能有一个自然数是0的因子),否则一定有解(当x=n-1时,令a,b为1,n即可),二是
注意:
1.可能会有重复解,所以用map判重
2.选取大于√n的因子做判断,不然会T
3.x=1是任何n的解(n>1)
代码:
#include<bits/stdc++.h>#include<set>using namespace std;int n;int a[50000],ans[1000000];map<int,bool>mp;main(){ scanf("%d",&n); if (n==1) printf("None"),exit(0); ans[++ans[0]]=1; for (int i=1;i<=sqrt(n);i++) if (n%i==0) a[++a[0]]=n/i; for (int i=1;i<=a[0];i++) for (int j=a[i];j<=n;j+=a[i]) { if ((j+2)%(n/a[i])==0&&j+1<=n&&!mp[j+1]) mp[j+1]=1, ans[++ans[0]]=j+1; if ((j-2)%(n/a[i])==0&&j-1>=0&&!mp[j-1]) mp[j-1]=1, ans[++ans[0]]=j-1; } sort(ans+1,ans+ans[0]+1); for (int i=1;i<=ans[0];i++) printf("%d\n",ans[i]);}
0 0
- 【BZOJ1406】【codevs2478】密码箱,数论练习
- 【bzoj1406】【AHOI2007】【密码箱】【数论】
- 【bzoj1406】 AHOI2007密码箱 数论
- [bzoj1406][数论]密码箱
- BZOJ1406 密码箱
- [BZOJ1406][AHOI2007]密码箱
- [bzoj1406]密码箱 解题报告
- BZOJ1406 [AHOI2007]密码箱
- bzoj1406: [AHOI2007]密码箱
- bzoj1406【数论】
- [BZOJ1406][AHOI2007]密码箱(数学相关)
- BZOJ 1406 AHOI2007 密码箱 数论
- BZOJ 1406 [AHOI2007]密码箱 数论
- [数论] BZOJ 1406 [AHOI2007]密码箱
- BZOJ 1406: [AHOI2007]密码箱 数论
- 【BZOJ】【P1406】【AHOI2007】【密码箱】【题解】【数论】
- 密码箱
- 【数论】数论专题练习
- android 拍照及本地获取图片,并显示
- shell 学习之for语句
- 20160225.CCPP体系详解(0035天)
- MDM 用itms-services给ios设备推送应用 ios8以上版本 更新安装失败
- 25.TabLayout的使用
- 【BZOJ1406】【codevs2478】密码箱,数论练习
- 搞了一上午的websocket,最后启动的时候发现websocket无法连接到服务器
- iOS直接使用十六进制颜色转换方法
- iOS开发UI篇—懒加载
- [leetcode]4. Median of Two Sorted Arrays
- 20160226.CCPP体系详解(0036天)
- 一、JSP指令简介http://www.cnblogs.com/xdp-gacl/p/3778993.html
- 简单数论-Gcd
- 关于angular选取select下拉框中的值