3136389_ce.cpp

来自「北大大牛代码 1240道题的原代码 超级权威」· C++ 代码 · 共 37 行

CPP
37
字号
#include <stdio.h>
#include <math.h>

#define MAXN 1e14
typedef long double num;
typedef __int64 Int;

int R[100][2];

int main ()
{
  Int n, t, d;
  int c, k, z, i;
  num x;

  while (scanf ("%I64d", &n) == 1) {
    assert (n > 0 && n <= MAXN + 0.5);
    c = 0;  z = (exp (log (3.0*n) / 3) + 3);
    n *= 6;
    for (k = 1; k <= z; k++) {
      t = n/k;  if (t*k != n) continue;
      d = 6*t - 3*((Int) k*k-1);  if (d <= 0) break;
      x = sqrt(d);  x = floor ((x+d/x+1)/2);
      if (x*x != d) continue;
      t = x - 3*(k-1);  if (t % 6 || t <= 0) continue;
      R[c][0]=t/6;  R[c++][1] = k;
    }
    printf ("%d\n", c);
    while (c--) {
      printf ("%d ", k = R[c][1]);
      for (i = 0; i < k; i++) printf (" %d", R[c][0] + i);
      puts ("");
    }
  }
  return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?