Java >> Java tutoriál >  >> Java

Najděte nejbližší faktor číslu, čísla

Snažím se automatizovat hledání nejbližšího faktoru čísla k jinému číslu;

Příklad:

Nejbližší faktor 700 až 30 je 28 (30 nezapadá do 700, ale 28 ano).

Zřejmým řešením je získat všechny faktory 700 a provést jednoduchý výpočet vzdálenosti k nalezení nejbližšího faktoru k 30, ale to se zdá být neefektivní.

Dalším řešením je najít všechny základní primární faktory, například:

private List<Integer> getPrimeFactors(int upTo) {
    List<Integer> result = new ArrayList<>();
    for (int i = 2; i <= upTo; i++) {
        if (upTo % i == 0) {
            result.add(i);
        }
    }
    return result;
}

A vynásobením každého z těchto čísel dohromady získáte všechny kombinace, a tedy najít tu nejbližší.

Snažím se to naprogramovat tak, aby to bylo automated.Any lepší řešení?

Odpověď

Mám své řešení zabaleno do malé statické metody:

/**
* @param target the number you want the factor to be close to
* @param number the number you want the result to be a factor of
*/
private static int getClosestFactor(int target, int number) {
    for (int i = 0; i < number; i++) {
        if (number % (target + i) == 0) {
            return target + i;
        } else if (number % (target - i) == 0) {
            return target - i;
        }
    }
    return number;
}

Java Tag