Decomposição em fatores primos
Publicado por Enzo de Brito Ferber 28/03/2009
[ Hits: 17.380 ]
Homepage: http://www.maximasonorizacao.com.br
Sim, eu tenho outro script desse aqui no VOL, mas esse está bem melhor (mais compacto e rapido).
Outra coisa, o código está em inglês como sempre, pois este site não é o unico que publico (e o ingles é a linguagem internacional da informática).
Então, happy coding!
// primes.c
/* Enzo Ferber : <enzo@veloxmail.com.br>
*
* Decompose into Prime Factors a given number
*
* march 27 2009
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define START 2
// used by the main() function to print the factors
int control;
/* decom ( num )
*
* @ num: number to decompose
*
* @ Return: return an int* containing all the prime factors
*/
int *decom ( int num )
{
// ...
register int i;
int *primes = (int *) malloc ( sizeof (int) );
// Houston, we have a problem!
if ( !primes ) exit (0);
// set control variable
control = 1;
// START represents the first prime number, 2
for ( i = START; i <= num || num != 1 ; i++ )
{
// ensures just an exact division
while ( (num % i) == 0)
{
// I WANT MORE MEMORY, BITCH!!!
primes = (int *) realloc ( primes, control * sizeof (int));
// Houston, we have a problem!
if ( !primes) exit (0);
// put the current prime factor into the list
primes[control - 1] = i;
control++;
// set new number to be divided next
num = num / i;
}
}
// return the prime list
return primes;
}
int main ( int argc, char **argv )
{
// check for the correct argument
if ( argc != 2 )
{
// HowTo use a very complex program...
printf ( "Usage: %s <number>\n", argv[0] );
return 0;
}
// begin the program if the arguments are correct
register int i;
// call the function to decompose into prime factors
int *primes = decom ( atoi(argv[1]) );
// print prime list
for ( i = 0; i < control - 1; i++ )
printf ( "%3d: %d\n", i + 1, primes[i] );
// free the memory
free ( primes );
return 0;
}
Divisores de um inteiro positivo em C++
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Pergunta: Meu teclado não está respondendo direito como e consertar? (2)
Secure boot, artigo interessante, nada técnico. (6)
SQLITE não quer funcionar no LINUX LMDE6 64 com Lazaruz 4.2 64bit (n... (0)









