Ir ao conteúdo

Números primos e seus divisores


bilk

Posts recomendados

Postado

oi, estou fazendo um exercício de algoritmo para verificar se  numero é primo ou não e mostrar o números de divisores deste numero. Então, a parte do primo eu fiz mas eu não to conseguindo pegar o numero de divisores, se alguém poder dar uma dica ai agradeço.

Este é o código:

 

#include <iostream>#include <stdio.h>using namespace std;int main(){    int num;    int cont;    int result;    cout << "-|Verificação de Numeros Pimos|-" << endl;    cout << "Digite um numero: ";    cin >> num;    while(num >= 0){        for(cont = 2; cont < num; cont++){            result = num % cont;            if(result == 0){                break;            }        }        if(result != 0){            cout << "Numero " << num << " é primo!" << divis << endl;        }        else{            cout << "Numero " << num << " não é primo!" << divis << endl;        }        cout << "Digite um Número: ";        cin >> num;    }    return 0;}
Postado

Como se calcula número de divisores?

 

Primeiro, a fatoração.

Segundo, contagem da multiplicidade de cada fator.

Terceiro, o cálculo.

 

Exemplo: 360

 

360/2 = 180

180/2 = 90

90/2 = 45

45/2 = ?!

 

Conta-se aqui três divisões por 2, ok? Agora ao próximo primo.

 

45/3 = 15

15/3 = 5

5/3 = ?!

 

Mesma coisa. Próximo: 5.

 

5/5 = 1 #encerra-se

 

Agora para o cálculo soma-se 1 a cada multiplicidade e multiplica-se.

 

O 2 tem 3 vezes: 3+1 = 4

O 3 tem  2 vezes: 2+1 = 3

O 5 tem 1 vez: 1+1 = 2

 

Então: 4 x 3 x 2 = 24 divisores.

 

Se fosse, por exemplo, 196:

 

196 / 2 = 98

98 / 2 = 49

49 / 2 = ?!

 

Agora com 3 :

 

49/3 = ?!

 

Agora com 5:

 

49 / 5 = ?!

 

Agora com 7:

 

49/7 = 7

7/7 = 1

 

Logo: 2+1 = 3 e 2+1 = 3 -> 3 x 3 = 9 divisores.

D(196) = {1, 2, 4, 7, 14, 28, 49, 98, 196} -> nove divisores (quadrados perfeitos sempre possuem número de divisores ímpar: 14 x 14 = 196)

 

Então, você precisa testar a divisão prá ver se ela é exata, isto é, resto zero.

Se for, você divide pelo fator e conta cada divisão numa variável temporária (buffer). Depois acrescenta 1.

Quando partir prá divisão com outro fator, multiplica o contador de fatores por essa variável temporária.

Zera o contador temporário e repete tudo.

 

Não precisa seguir a ordem 2, 3, 5, 7 ... porque quando partir pro 4, não haverá mais divisores de 2.

 

No seu primeiro algoritmo de primaridade, você não precisa contar a partir do 2. Tente apenas por ímpares de dois em dois

for(cont = 3; cont < num; cont+=2){

Apenas o 2 é primo par. Não precisa testar os outros. Fica mais rápido.

 

 

Outra coisa:

#include <iostream>#include <stdio.h>
Você está misturando C com C++.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!