HDU 4143 A Simple Problem
2016-04-06 14:03
246 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4143
代码:
其实上述式子转化后可以分解因子:n = ( y – x )*( y + x ) ;
令 y – x = i,所以有 x + y = n / i ,即 ( n / i – i ) / 2 = x.
注意:x 要大于 0 ,当 n 是完全平方数时要注意。
刚开始还以为要预处理打表,放弃了。后来找规律,放弃了。。。还是直接枚举呀。。。
知道要从sqrt(n)开始,因为要x最小,必须y-x与y+x最接近。从sqrt(n)开始,往前找第一个满足条件的。
代码:
#include"stdio.h" #include"math.h" int main() { int i; int t; int n; int x; int T; scanf("%d",&T); while(T--) { scanf("%d",&n); x=-1; t=(int)sqrt(n); for(i=t;i>0;i--) { if(n%i==0&&(n/i-i)%2==0&&(n/i-i)/2>0) { x=(n/i-i)/2; break; } } printf("%d\n",x); } return 0; }
其实上述式子转化后可以分解因子:n = ( y – x )*( y + x ) ;
令 y – x = i,所以有 x + y = n / i ,即 ( n / i – i ) / 2 = x.
注意:x 要大于 0 ,当 n 是完全平方数时要注意。
刚开始还以为要预处理打表,放弃了。后来找规律,放弃了。。。还是直接枚举呀。。。
知道要从sqrt(n)开始,因为要x最小,必须y-x与y+x最接近。从sqrt(n)开始,往前找第一个满足条件的。
相关文章推荐
- Linux 环境下查看resin版本
- sql大于8000字符的字符替换
- Java入门:修改IDE主题颜色
- 第六周---补
- C# 获取本地电脑所有的盘符
- Android之TelephonyManager类的方法详解
- C# 获取本地电脑所有的盘符
- 2016.04.06,英语,《Vocabulary Builder》Unit 10
- 给表格内容换行和表格选中行设置背景色
- 开不了的窗_____window.open
- Android消息机制浅析——面试总结
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- React和Redux的连接react-redux
- Java Web项目中使用Freemarker模版生成Word文档
- [IMX6Q][Android5.1]移植笔记 --- LCD显示移植(LVDS接口)
- 如何向线程传递参数
- 判断.NET4.0是否安装
- 博客写作的Checklist
- HDU 4288线段树开动脑筋
- MFC+opencv显示图片