首页 > 其他 > 详细

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

时间:2019-12-08 15:50:44      阅读:74      评论:0      收藏:0      [点我收藏+]

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");
        }
    }
}

 

 

 

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

原文:https://www.cnblogs.com/shoulinniao/p/12005727.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!