Descobrindo multiplicador da operação

Boa noite, todos.
Sou novo aqui e não achei nenhum tópico semelhante então estou criando esse novo.

A situação problema é, uma operação de tentativa e erro para descobrir os multiplicadores (incognitas).
Descobrir os valores:
" ? * ? = A "
Ex: 2 * 2 = 4

O desafio é produzir algo para inúmeras incógnitas " ? * ? * … ? = A " seja A pertencente a N, bem como as incógnitas sejam as incógnitas diferentes de 1 e 𝐴.

Produzi para duas variáveis mas não consegui desenvolver a partir dai

Segue abaixo:

public static void main(String[] args) {

     int c;
    String valor = JOptionPane.showInputDialog(null,"Insira um valor");
    c = Integer.parseInt(valor);
    
    for (int a = 2; a < c; a++) {
        // verifica se o resto da divisao é zero
        if ((c % a) == 0) {
            // Imprime o valor na tela
            System.out.println(a);
        }
                                            
    }              
            
}

Primeiro que você tem que colocar limites nas coisas ai, a memória da sua JVM não é infinita, logo mais hora menos hora o pau quebra… e mesmo que você vá descartando os objetos é meio brabo pensar em um programa infinito, eu dei uma cutucada básica e cheguei no código abaixo desenvolve algo a partir daí eu fiz algo próximo do que vc quer, mas com limite de 100 parcelas e cada parcela valendo no máximo 100… Tem espaço pra melhorar horrores nesse código, mas nele está o caminho das pedras que vc precisa… mexe nos limites e adapta pro seu objetivo.

public class Calculadora {

    public static void main(String[] args) {
        Integer numeroDigitado = 220;
        Integer[] parcela = new Integer[100];
        for (int i = 0; i < 100; i++) {
            parcela[i] = 1;
        }
        while (parcela[99] <= 100) {
            BigInteger bi = BigInteger.ONE;
            for (int i = 0; i < 100; i++) {
                bi = bi.multiply(new BigInteger(parcela[i].toString()));
            }
            if (bi.equals(new BigInteger(numeroDigitado.toString()))) {
                String impressao = "";
                for (Integer par : parcela) {
                    if (par != 1){
                        impressao = impressao + " * " + par;
                    }
                }
                impressao = impressao.substring(3) + " = " + numeroDigitado;
                System.out.println(impressao);
            }
            parcela = Calculadora.addParcela(parcela);            
        }
    }

    private static Integer[] addParcela(Integer[] parcela) {
        int parcelaAtual = 0;
        parcela[parcelaAtual]++;
        while (parcela[parcelaAtual] > 100 && parcelaAtual < 100) {
            parcela[parcelaAtual] = 1;
            parcelaAtual++;
            parcela[parcelaAtual]++;
        }
        return parcela;
    }
}
1 curtida

Uma idéia de melhoria é fazer o limite de parcelas ser ser o LOG2 Y = X, sendo Y o numero imediatamente acima do numeroDigitado capaz de dar um resultado X inteiro;

Outra melhoria é fazer o limite de cada parcela ser o numeroDigitado;

Outra é capturar e ignorar parcelas mesmo que em ordens diferentes que já usaram números iguais

Enfim, viajei na maionese… Mas to soltando o osso pra vc agora desenvolver seu próprio código a partir disso ai…

1 curtida

Satangozo,

Mano, salvou grandão!
De fato viajou legal mas eu curti as ideias e vou dar uma mexida nessa calc ai. Estou começando a mexer com Java agora e na faculdade veio esse projetinho mas vejo muito potencial nele. Abraço.