K-消亡的质数-(简单数学)

https://ac.nowcoder.com/acm/contest/3346/K

题意:判断一个素数p是不是某两个数的立方差。

刚看到这道题一时半会都没有什么思路,看了题解恍然大悟,太久没碰数学或数论的,记录一下过程。

1.立方差公式:x3 - y3 = (x-y)(x2 + xy + y2)

2.(x-y)(x+ xy + y2)=p

3.因为p是素数,所以x-y=1

4.将x=y+1带入原公式化简得 3y(y+1)=p-1

5.要使上式成立,(p-1)%3==0 &&  sqrt((p-1)/3) * (sqrt((p-1)/3)+1) == (p-1)/3

 

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        int n;
        n=scan.nextInt();
        long p;
        while(n!=0) {
            n--;
            p=scan.nextLong();
            if((p-1)%3==0) {
                p=(p-1)/3;
                long y=(long)Math.sqrt(p);//向下取整
                if(y*(y+1)==p)
                    System.out.println("YES");
                else 
                    System.out.println("NO");
                
            }else 
                System.out.println("NO");
        }
    }
}

 

 

 

posted @ 2019-12-08 14:44  守林鸟  阅读(321)  评论(0编辑  收藏  举报