HDU 2092 韦达定理
来源:互联网 发布:淘宝配近视眼镜 编辑:程序博客网 时间:2024/06/09 20:02
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2092
题解:刚开始看见这个题,就是模拟,联想开灯问题很容易想到从乘法约数开始选数并且可以缩小范围(缩小的平方根的绝对值),按着这个思路我就写了一段代码,可惜wa了,想了好大会,才发现这种优化仅适合当M为正整数,对于负数,必须乖乖的从小到大遍历,比如给你数为 -13 -14,如果我还按照先前优化的思想,遍历时肯定从-3 到-1,这时我会漏掉 -14 1,这样会找不到2个数相加等于-13。自己还是太年轻了。
(半优化)代码:
#include<iostream>#include<algorithm>using namespace std;int main() {int n, m;while (cin >> n >> m && (n || m)) {int flag = 0,teminal;teminal = (m > 0 ? m: -m);int num = sqrt(teminal);if (m > 0) { //////仅仅对当m为正整数 ,做了些许优化int temp = -num;for (int i = temp;i <= num;i++) {if (i&&m%i == 0) {if (i + m / i == n) {flag = 1;break;}}}}else if(m < 0){for (int i = m;i <= -1;i++) {if (m%i == 0) {if (i + m / i == n) {flag = 1;break;}}}}if (flag||m==0)cout << "Yes" << endl;elsecout << "No" << endl;}}
牛逼方法:韦达定理。
设一元二次方程 中,两根x₁、x₂有如下关系:
韦达定理变种 x+y=n; x*y=m;假设x,y是一元二次方程的两解,则x+y=-b/a=n,x*y=c/a;b^2-4ac等价于b^2/a^2-4c/a 即n*n-4*m因为要找出是否存在2个整数,所以b^2-4ac>=0并且开平方根为整数。代码如下:#include <stdio.h>#include <math.h>int main() { int n, m; while (~scanf("%d %d",&n,&m) && (n || m)){ (int)sqrt(n * n - 4 * m) == sqrt(n * n - 4 * m) ? puts("Yes") : puts("No");////此处很巧妙,如果n*n-4*m<0,则等式前有整数,而等式后会输出-nan(ind) }}
0 0
- HDU 2092 韦达定理
- HDU 6158 计算几何 笛卡尔定理 + 韦达定理
- HDU 6158 The Designer(笛卡尔定理+韦达定理)
- HDU 6158 (计算几何+笛卡尔定理+韦达定理)
- HDU 6158 The Designer 笛卡尔定理+韦达定理 2017ccpc网络赛
- HDU 6158 The Designer【计算几何+笛卡尔定理+韦达定理】
- hdu 6158 The Designer && 计蒜客 Finding the Radius for an Inserted Circle 笛卡尔定理应用+韦达定理
- hdu 1098-二项式定理
- [费马小定理]hdu 4196
- HDU 3923 Ploya定理
- hdu 1573 孙子定理
- HDU 3775 pick 定理
- 费马小定理 hdu 1098
- hdu 3037 lucas定理
- hdu 4704 费马小定理
- hdu 2080 余弦定理
- hdu 4704(费马小定理)
- hdu 4259 polya定理
- Android 自定义星级评分控件
- SpringMVC RESTful 实践demo
- 定义一个结构体指针需要分配存储空间?
- as中apk签名和多渠道打包
- mysql索引(mysql 索引类型以及创建)
- HDU 2092 韦达定理
- 怎么编写高扩展性的应用
- c# GDI+ 中发生一般性错误。。
- Java web项目 在线网络考试添加管理员部分代码
- 微信小程序:一是款充满无限可能的产品
- 冬季练习(sy)
- 80老翁谈人生(341):我心中的怀念:火星人
- 如何拆分PDF文件的页面
- 研究生数学建模的感想