【bzoj1406】 AHOI2007密码箱 数论
2015-09-10 13:51
357 查看
化简一下式子。
(x+1)(x-1)=k*n
x+1=k1n1 x-1=k2n2 k1k2=k n1n2=n
那么我们枚举n的大于根号n的因子n1,然后枚举一个k1,之后把k1n1分别作为x+1和x-1来求解,看一看求出的另一个是否是n/n1的倍数,注意用set去重。
(x+1)(x-1)=k*n
x+1=k1n1 x-1=k2n2 k1k2=k n1n2=n
那么我们枚举n的大于根号n的因子n1,然后枚举一个k1,之后把k1n1分别作为x+1和x-1来求解,看一看求出的另一个是否是n/n1的倍数,注意用set去重。
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iostream> #include<algorithm> #include<set> #define maxn 2000000000 using namespace std; set<int> p; int n; int main() { scanf("%d",&n); for (int i=1;i*i<=n;i++) if (n%i==0) { int b=n/i; for (int j=1;j<=n;j+=b) if ((j+1)%i==0) p.insert(j); for (int j=b-1;j<=n;j+=b) if ((j-1)%i==0) p.insert(j); } if (!p.size()) printf("None\n"); set<int>::iterator i; for (i=p.begin();i!=p.end();i++) printf("%d\n",*i); return 0; }
相关文章推荐
- 搭建ssh框架报错
- Spring mvc注解详解
- Linux下C/C++ 目录和文件操作
- 1 Two Sum
- Android 各层中日志打印功能的应用
- UBuntu经常使用的操作(网络资源)
- iptables nat 测试
- 计算G711语音的打包长度和RTP里timestamp的增长量
- rk3188 双屏异显分析
- 函数的增长——算法导论(2)
- spray-routing使用Case Class Extraction
- [LeetCode 278] First Bad Version
- 0909编译原理
- Android drawText获取text宽度的三种方式
- Jmeter入门测试
- SDN在诺基亚5G无线计划中扮演重要角色
- Linux Purify命令
- Ubuntu 上使用 LVM 轻松调整分区并制作快照-兄弟连IT教育
- Centos6修改时区
- Leetcode: Container With Most Water