【数学】A Cubic number and A Cubic Number

 

A cubic number is the result of using a whole number in a multiplication three times. For example, 3×3×3=27so 

27

 is a cubic number. The first few cubic numbers are 1,8,27,64 and 125. Given an prime number p. Check that if 

p

 is a difference of two cubic numbers.

InputThe first of input contains an integer T (1T100) which is the total number of test cases.
For each test case, a line contains a prime number p (2p10^12).OutputFor each test case, output 'YES' if given p

p

is a difference of two cubic numbers, or 'NO' if not.

Sample Input

10
2
3
5
7
11
13
17
19
23
29

Sample Output

NO
NO
NO
YES
NO
NO
NO
YES
NO
NO

题意:给一个质数,判断该质数是否为两立方数之差

首先x^3-y^3为一个质数则展开立方差公式后发现:x=y+1
带入化简,得3*y(y+1)+1
所以一个质数n要是两立方数之差。有n-1是3的倍数,且n-1是两相邻数之积
#include<iostream>
#include <climits>
#include <cstdio>
#include <algorithm>
#define LL long long
using namespace std;
int main()
{
  int T;
  scanf("%d", &T);
  while (T--)
  {
    LL n;
    scanf("%lld", &n);
    //P=3*(y+1)*y+1
    if ((n - 1) % 3)
    {
      printf("NO\n");
      continue;
    }
    LL x = (LL)sqrt((n - 1) / 3);

    if (x*(x + 1) == (n - 1) / 3)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注

18 − 14 =