质因数分解 Java解法

已知正整数 n 是两个不同的质数的乘积,试求出两者中较大的那个质数。

输入格式
输入一个正整数
n。
输出格式
输出一个正整数
p,即较大的那个质数。
例如
输入:21
输出:7

输入:1999999874
输出:999999937

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        //一个数由两个数相乘得到,那么其中一个一定比他的平方根小,一个肯定比他的平方根大
        //所以我们就不必把小于n的所有质数(素数)都求出来然后二重循环找两个乘数了 (那样较大的测试样例也会出问题)
        // 只需要求出比他平方根小的部分就行了
        //然后题目给出的数必然是由两个质数相乘得到的,那么后面我们只需要对数组进行取余遍历,便可以得到谁是另外一个乘数
        //那么这个数自然也就是二者中的较大值。
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int t = 0,count = 0;
        for (int i = 2; i <= (int)(Math.sqrt(n)); i++) {
            if(isPrime(i)){
                count++;
            }
        }
        int [] arr = new int[count];
        for (int i = 2; i <=(int)(Math.sqrt(n)) ; i++) {
            if(isPrime(i)){
                arr[t] = i;
                t++;
            }
        }
        int result = 0;
        for (int i = 0; i < count; i++) {
            if(n%arr[i]==0) result = n/arr[i];
        }
        System.out.println(result);
    }
    public static boolean isPrime(int n){
        if(n==1) return false;
        else{
            for (int i = 2; i <= (int)(Math.sqrt(n)); i++) {
                if(n%i==0)return false;
            }
        }
        return true;
    }
}

感谢您的观看,仅是日常小练习,如有错误,欢迎指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

桂花香04

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值