#include <stdio.h>
#include <stdlib.h>
// Versão de números grandes de um verificador de números primos
int main(int argc, char* argv[])
{
unsigned long long int i;
unsigned long long int num = strtoull(argv[1], NULL, 10);
for ( i = 2 ; i < num ; i++ )
{
if ( num % i == 0 )
{
printf("num = %llu NÃO é primo\n", num);
exit(0);
}
}
printf("num = %llu é primo\n", num);
return 0;
}
// Compilar: gcc prog.c -o prog.exe
// Rodar: ./prog.exe numero
// Exemplo: ./prog.exe 71
// Saida : 71 é primo
4 comentários:
Professor, poderia comentar os códigos? Pois, por exemplo, não entendo por que chama o long 2 vezes consecutivas: "unsigned long long int i;
unsigned long long int num = strtoull(argv[1], NULL, 10);"
Acredito que vários estão com a mesma dúvida, se não, eu pelomenos gostaria de saber. Grato, Ewerton Lira
Porque, por motivos históricos, unsigned long int representa um inteiro de 4 bytes sem sinal, enquanto unsigned long long int representa um inteiro de 8 bytes sem sinal.
Ou seja, se queremos números grandes sem sinal, usa-se unsigned long long int.
O seguinte mini-programa é útil para saber os tamanhos dos tipos:
#include
#include
int main(void)
{
int i;
i = sizeof(double);
printf("tam double = %d bytes\n", i);
i = sizeof(int);
printf("tam int = %d bytes\n", i);
i = sizeof(char);
printf("tam char = %d bytes\n", i);
i = sizeof(float);
printf("tam float = %d bytes\n", i);
i = sizeof(long int);
printf("tam long int = %d bytes\n", i);
i = sizeof(long long int);
printf("tam long long int = %d bytes\n", i);
i = sizeof(short int);
printf("tam short int = %d bytes\n", i);
i = sizeof(long double);
printf("tam long double = %d bytes\n", i);
}
Pode colocar outros tipos e modificadores se quiser no código. Todos os tipos e modificadores encontram-se em qualquer manual de C, apostila, internet, etc.
A função strtoull converte uma string (que foi passada como parâmetro para o programa) em um unsigned long long de base 10.
o primeiro argumento é a string, o último é a base. O segundo não é usado, por isso passei um ponteiro NULO (NULL).
Valeu Teacher! é bom saber!
Postar um comentário