Simples gerador de números primos
Publicado por Perfil removido (última atualização em 28/03/2018)
[ Hits: 4.268 ]
Um código simples, com algorítimo não otimizado, para gerar números primos em "ranges" passados como parâmetros. O "output" é organizado em colunas, usando o caractere '\t' como separador e quebrando a linha quando atingido 80 colunas.
Exemplo de uso (considerando o nome do binário como "a.out"):
$ ./a.out 1 100
/* This is free and unencumbered software released into the public domain. */
#include <sys/types.h>
#include <err.h>
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#define COLUMNS 80
#define SAFEZON 8
#ifndef __progname
extern char *__progname;
#endif
#ifndef getprogname
#define getprogname( ) __progname
#endif
#ifndef setprogname
#define setprogname(x) __progname = x
#endif
static int
numlen(ssize_t num) {
ssize_t res;
for (res = 0; num; res++)
num /= 10;
return res;
}
static ssize_t
strtobase(const char *str, ssize_t min, ssize_t max, int base)
{
ssize_t res;
char *end;
errno = 0;
res = strtoll(str, &end, base);
if (end == str || *end != '\0')
errno = EINVAL;
if (res > max || res < min)
errno = ERANGE;
if (errno)
err(1, "strtobase %s", str);
return res;
}
static void
usage(void)
{
fprintf(stderr, "usage: %s from to\n", getprogname());
exit(1);
}
int
main(int argc, char *argv[])
{
ssize_t i, from, to;
int chrp, ndiv;
setprogname(argv[0]);
argc--, argv++;
if (argc < 2)
usage();
from = strtobase(argv[0], 1, SSIZE_MAX, 10);
to = strtobase(argv[1], 1, SSIZE_MAX, 10);
chrp = 1;
for (; from < to; from++) {
i = 1;
ndiv = 0;
for (; i < from; i++) {
if (!(from % i) && (i != 1 && i != from)) {
ndiv++;
break;
}
}
if (ndiv)
continue;
if ((chrp += numlen(from) + SAFEZON) > COLUMNS) {
putchar('\n');
chrp = 1;
}
printf("%zd", from);
if ((from + 1) < to)
putchar('\t');
}
putchar('\n');
return 0;
}
Os cincos primeiros termos da séries de fourier
Conio.h para Linux (Nova versão)
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (4)
Warcraft II Remastered no Linux? (3)









