当前位置: 首页 > 知识库问答 >
问题:

Java,最大素因子

常翰
2023-03-14

我试图解决这个问题:https://www.hackerrank.com/contests/projecteuler/challenges/euler003/submissions/code/2977447

13195的质因数是5、7、13、29。

给定数N的最大素因子是什么?

输入格式第一行包含T,测试用例数。后面是T行,每行包含一个整数N。

每个测试用例的输出格式,显示N的最大素因子。

约束条件

     1≤T≤10 
    10≤N≤1012

我下面的代码在第五次测试中出现超时错误(我们不知道实际内容)。有没有想过为什么它没有通过测试?谢谢

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;

/* Author: Derek Zhu
 * 1and1get2@gmail.com
 * https://www.hackerrank.com/contests/projecteuler/challenges/euler003
 * */
// The part of the program involving reading from STDIN and writing to STDOUT has been provided by us.

public class Solution {
    public static boolean D = true;
    static BufferedReader in = new BufferedReader(new InputStreamReader(
            System.in));
    static StringBuilder out = new StringBuilder();

    public static void main(String[] args) throws NumberFormatException,
            IOException {
        int numOfCases = Integer.parseInt(in.readLine());

        for (int i = 0; i < numOfCases; i++){
            calculateCase(Long.parseLong(in.readLine())); 
        }


    }
    private static void calculateCase(Long input) throws IOException{

        if (D) System.out.println("Processing: " + input);
        long largestPF = prime(input);

        if (D) System.out.print("Final calculate: ");
        System.out.println(largestPF);
    }
    private static long prime(long n){
        long i = 2;
        while ( n % i != 0 && i < n){
            i ++;
        }
        if (D) System.out.println("found i: " + i);

        if (i < n){
            return prime(n/i);
        } else {
            return n;
        }
    }
    public static int primeFactors(BigInteger number)     {
        BigInteger copyOfInput = number;
        int lastFactor = 0;
        for (int i = 2;
        BigInteger.valueOf(i)
        .compareTo(copyOfInput) <= 0; i++) {
            if (copyOfInput.mod(BigInteger.valueOf(i))
            .compareTo(BigInteger.ZERO) == 0) 
            {
                lastFactor = i;
                copyOfInput = copyOfInput
                .divide(BigInteger.valueOf(i));
                i--;
            }
        }
        return lastFactor;
    }
}

共有1个答案

万俟亦
2023-03-14

谢谢@ajb

事实证明,采用另一种方法会更有效率。

private static long method2(long NUMBER){
        long result = 0;
        for(int i = 2; i < NUMBER; i++) {
            if(NUMBER % i == 0 && isPrime(NUMBER / i)) {
                result = NUMBER / i;
                break;
            }
        }
        return result;

    }
    private static boolean isPrime(long l) {
        for(long num = 2, max = l / 2 ; num < max; num++) {
            if(l % num == 0) {
                return false;
            }
        }
        return true;
    }

可以在这里找到带有时间比较的完整代码:https://github.com/1and1get2/hackerrank/blob/master/Contests/ProjectEuler+/003_LargestPrimeFactor/src/Solution.java

 类似资料:
  • 这就是Euler项目的问题3。对于那些不知道的人,我必须找出最大的素因子600851475143。我有以下代码: 但是,当我用比600851475143小(很多)的东西测试程序时,比如100000000,那么程序需要时间——事实上,100000000到目前为止已经花了20分钟,而且还在继续。很明显,我在这里的做法是错误的(是的,这个程序确实有效,我用较小的数字进行了尝试)。有人能提出一种不那么详尽

  • 我在研究Euler项目的问题,这是问题五: 最大素因子问题3 13195的素因子为5、7、13和29。 600851475143的最大质因数是什么? 我得到了工作代码: 因数(19*19*19*19*19*19*19*19*19*1999989899) x=33170854034208712,最后一个系数=182128674 33170854034208712 有人知道为什么这没有得到正确的答案吗

  • 我试图解决欧拉项目问题3,即: 13195的主要因子为5、7、13和29。数字600851475143中最大的素因子是什么? 这是我的解决方案,它适用于较小的值,但对于所需的数字却无法完成:

  • 本节通过求数组的最大和最小值来提高初学者对数组的一些基本应用。 程序运行结果如下: 最高成绩:100 最低成绩:67 将变量 min 与 max 初值设成数组的第 1 个元素后,再逐一与数组中的各元素相比。比 min 小,就将该元索的值指定给 min 存放,使 min 的内容保持最小。同样,当该元素比 max 大时,就将该元素的值指定给 max 存放,使 max 的内容保持最大。for 循环执行完

  • 我实现了c程序,可以找到矩阵的元素:行的最大元素,同时列的最小元素,或行的-min元素,同时列的最大元素。例如,我们有数据。包含以下内容的txt文件: 4 7 8 9 10 6 5 4 11 5 0 1 12 4 2 7 13- 其中4是n-矩阵大小(4x4),7和10是这些数字。 下面是代码: 问题:我想知道我的代码是不是“脏”代码?因为我总是渴望让一切变得如此困难,只要有可能让它变得容易。是否

  • 在一本书(算法导论,但我不记得是哪一章)中,我学到了求解两元素间最大差值问题: 两个元素之间的最大差,使得较大的元素出现在较小的数之后。 查找数组(至少包含一个数字)中和最大的相邻子数组。 例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],相邻子数组[4,-1,2,1]的最大和=6。 为了解决的两元素间最大差异问题,可以将其转化为数组的最大子数组问题: 我在想为什么。