Simples gerador de números primos
Publicado por Perfil removido (última atualização em 28/03/2018)
[ Hits: 4.368 ]
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;
}
Função para concatenar texto ilimitada
Calcular determinante de matrizes
Alocando espaço para uma matriz dinamicamente
KDE Plasma - porque pode ser a melhor opção de interface gráfica
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Instalar Linux em notebook Sony Vaio VPCEG13EB (10)
Vou destruir sua infância:) (6)
Quando vocês pararam de testar distros? (24)









