求一个最小的正整数x,使得(y + x) (y - x) = n成立

考虑一下n的分解因式。

可能会想到枚举n的约数,那么a * b = n成立,取最小的x即可

但是要枚举到n / 2,这样会超时。

因为要使得a * b = n,那么a和b中最大的数字最多是sqrt(n),因为不可能是两个大于sqrt(n)的数字相乘得到n的(大过n了)

所以我可以枚举 1 -- sqrt(n)中n的约数,得到a和b,然后反转一下a和b,就是所有a * b = n的结果

例如18的约数

1、2、3、6、9、18

枚举到sqrt(18) = 4即可

当然这题不用反转。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;#include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>void work() {int n;scanf("%d", &n);int t = sqrt(n * 1.0);int ans = inf;for (int i = 1; i <= t; ++i) {if (n % i != 0) continue;int a = n / i;int b = i;if ((a - b) & 1) continue;if (a == b) continue;ans = min(ans, (a - b) / 2);}if (ans == inf) {printf("-1\n");} else {printf("%d\n", ans);}return;
}int main() {
#ifdef localfreopen("data.txt","r",stdin);
#endifint t;scanf("%d", &t);while (t--) {work();}return 0;
}

View Code

转载于:https://www.cnblogs.com/liuweimingcprogram/p/5890191.html

HDU 4143 A Simple Problem 分解因式相关推荐

  1. hdu 4143 A Simple Problem 数论

    y^2 = n +x^2 这道题目我做了一个小时多小时,你说累不累. 首先两个 平方数之间的差距 1^2   2^2 3^2  4^2 5 ^2 之间的 差距是  3 5 7 9  所以 只要是  奇 ...

  2. HDU 4267 A Simple Problem with Integers

    方法参考http://blog.csdn.net/acm_cxlove/article/details/7854526 题目:给出n个数,每次将一段区间内满足(i-l)%k==0 (r>=i&g ...

  3. HDU 4267 A Simple Problem with Integers [树状数组]

    根据%k=a中a和k的不同组合建立55棵树状数组,每次修改操作只对其中1棵树状数组进行操作,每次查询对其中10棵树状数组统计增量和. 1 #include <string.h> 2 #in ...

  4. HDU 2552 A simple problem

    题意: Zty很痴迷数学问题..一天,yifenfei出了个数学题想难倒他,让他回答1 / n.但Zty却回答不了^_^. 请大家编程帮助他. 输出1/n. (是循环小数的,只输出第一个循环节). 分 ...

  5. HDU 3651 A Simple Problem

    HDU_3651 首先可以把1~0映射成0~9,这样更好处理一些.接着我们可以用f[d][x][y]表示已经输入了d个数.左手指在x.右手指在y这种情况所需要的最少秒数,一开始d[0][4][5]=0 ...

  6. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  7. hdu 1002 A+B problem II

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目分析:高精度问题,大整数相加. 由此题可见java相较于C/C++的优势,即丰富多彩的类以及 ...

  8. HDU2522 A simple problem【分数与小数】

    A simple problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...

  9. BZOJ 4679/Hdu5331 Simple Problem LCT or 树链剖分

    4679: Hdu5331 Simple Problem 题意: 考场上,看到这道题就让我想起BZOJ4712洪水.然后思路就被带着飞起了,完全没去考虑一条链的情况,于是GG. 解法:先考虑一条链的做 ...

  10. COJ 1170 A Simple Problem

    题目:在一个由N个整数组成的数列中,最多能找到多少个位置连续的整数且其中的最大值与最小值之差不超过K呢? GDKOI 2003 又一道很类似的题(河床)使用的是动态规划,因为数据范围较小(复杂度为O( ...

最新文章

  1. 二叉树:二叉搜索树的编码和解码
  2. Activity的状态保存
  3. 比特币多重签名机制使用篇
  4. leetcode 853. Car Fleet | 853. 车队(Golang)
  5. 《分布式系统》教学大纲
  6. ui设计看的书_5本关于UI设计的书
  7. vue 动态数据请求
  8. 【转】Rhythm Of The Rain 雨的旋律
  9. detectron2训练自己的数据集_TensorFlow2学习十五、使用VGG16模型训练自己的数据集...
  10. C++常见面试题-30道
  11. 人只会看到他想看的,不想看的视而不见
  12. 学习记录:xmind2testcase测试用例模板
  13. 计算机基础应用模拟考试软件,全国计算机等级考试全真训练模拟考试软件一级基础及MS-Office应用...
  14. ModelState.IsValid 验证时忽略某些字段验证
  15. BAT 老兵的经验之谈,成长路上这个道理越早知道越好
  16. 非常简单Java web下Office转PDF功能实现 100%能用
  17. python中sinxcosy_编培笔记 | Python:第四班车
  18. 面试官:说说Redis之I/O多路复用模型实现原理
  19. 解决 Push failed: Unable to access 'https://github.com/...': Failed to connect ...Connection Refused
  20. [bzoj4544]椭圆上的整点 解题报告

热门文章

  1. Google开源的操作系统Fuchsia,专为大内存硬件设计
  2. *第二周*数据结构实践项目一【交换】
  3. 使用CoreTelephony获得SIM卡网络运营商名称
  4. 大数据 Spark 架构
  5. 9.1.3 .net framework通过业务逻辑层自动生成WebApi的做法
  6. C Traps:运算
  7. flex invalidation 机制
  8. APP 设计原则(界面设计原则) / 设计模式(界面设计模式、 程序架构模式、程序方法模式) 简述
  9. Update Remote Files 1.0
  10. SonarLint各种提示的意思