题解 | #质数因子#

质数因子

http://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607

解题思路:

本题主要是将一个输入的数转换成若干项质数乘积的表达式,这里有两个函数,一个是判断num是否为质数,一个是求大于或等于offset的下一个质数。因为我们必须保证输出的一定是质数,所以每次需要判断输入的num是否为质数,如果是质数,可以直接输出;如果不是质数,就要首先判断能否被最小的质数整除,如果能整除,就更新num的值为num / first进入下次循环;如果不能整除,就不能更新num的值,需要将质数扩大,但是又不能太大,我这里取得就是first下一个质数。最终循环终止条件就是num=1,表示num已经完全被质数整除了。

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        long num = scan.nextLong();
        int first = 2;
        while (num != 1) {
            if (isZhiShu(num)) {
                System.out.print(num + " ");
                break;
            }
            if (num % first == 0) {
                System.out.print(first + " ");
                num = num / first;
            } else {
                first = nextZhiShu(first + 1);
            }
        }
//        System.out.println(first + "的下一个质数:" + nextZhiShu(first+1));
//        System.out.println(num + "是质数吗?" + isZhiShu((int)num));
    }

    private static int nextZhiShu(int offset) {
        while (!isZhiShu(offset)) {
            offset++;
        }
        return offset;
    }

    public static boolean isZhiShu(long num) {
        for (int i = 2; i <= Math.pow(num,0.5); i++) {
            if (num % i == 0)
                return false;
        }
        return true;
    }

}
全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务