zoukankan      html  css  js  c++  java
  • 【洛谷习题】连续自然数和

    题目链接:https://www.luogu.org/problemnew/show/P1147


    水啊!话说最近老是在做水题。。。

    相当于求一段公差为1的等差数列使得其和为M,利用公式可以很轻松地推出a(1-a)+b(b+1)=2M,也就是说,找到一组(a,b)满足上述式子,其实就是答案。

    既然这么水,为什么要整理这道题呢?

    注意注意!防水防爆防溢出!可恶的溢出!WA了我三个点!

    额,还是说一下怎么找a和b吧,我们枚举a,就可以求出b(b+1),接下来只需要验证这个数是否可以表示成一个整数乘以该整数加1的形式。我是取其平方根t,看看他等不等于t(t+1)。这样做貌似是对的,,,暂时没反例。

    总之一句话!谨防溢出!

     1 #include <cstdio>
     2 #include <cmath>
     3 
     4 typedef long long ll;
     5 
     6 inline int judge(ll x) {
     7     int t = (int)sqrt(x);
     8     if (t * (t + 1LL) == x) return t;
     9     else return 0;
    10 }
    11 
    12 int main() {
    13     int m, first = 1;
    14     scanf("%d", &m);
    15     for (int i = 1; i < m; ++i) {
    16         ll j = 2 * m - i * (1LL - i);
    17         int k = judge(j);
    18         if (k) {
    19             if (first) first = 0;
    20             else putchar('
    ');
    21             printf("%d %d", i, k);
    22         }
    23     }
    24     return 0;
    25 }
    AC代码
  • 相关阅读:
    Oracle数据库
    Python-aiohttp百万并发
    Sentry的安装搭建与使用
    traceroute命令初探
    Python中断言与异常的区别
    二十三种设计模式及其python实现
    Celery
    SQLAlchemy
    python里使用reduce()函数
    python实现栈
  • 原文地址:https://www.cnblogs.com/Mr94Kevin/p/9771377.html
Copyright © 2011-2022 走看看