Kody źródłowe/Tablica rozkładów na sumę dwóch liczb pierwszych
Wygląd
#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <stdlib.h>
void main() {
int min,max;
int n,m,pierwiastek;
int pierwsza;
int licznik;
char *pierwsze;
do {
fprintf(stderr,"Poczatek przedzialu: ");
scanf("%d",&min);
} while (min<=3);
do {
fprintf(stderr,"\nKoniec przedzialu : ");
scanf("%d",&max);
} while (max<min);
pierwsze=(char*)malloc(max+1);
memset(pierwsze,1,max+1);
printf(
"Tablica rozkładów na sumę liczb pierwszych dla liczb parzystych od %d do %d:\n"
"<table border=\"1\" width=\"25%%\" style=\"text-align: left\">\n"
"<tr>\n"
"<th width=\"30%%\">Liczba</th>\n"
"<th width=\"70%%\">Składniki pierwsze</th>\n"
"</tr>\n"
,min,max);
licznik=1;
for (n=2;n<=max;n++) {
pierwsza=1;
pierwiastek=(int)(sqrt(n)+0.5);
for (m=2;m<=pierwiastek;m++)
if (pierwsze[m] && n%m==0) {
pierwsze[n]=0;
break;
}
if (n>=min && !(n&1)) {
if (n%100==0)
printf(
"</table>\n"
"<table border=\"1\" width=\"25%%\" style=\"text-align: left\">\n"
"<tr><td width=\"30%%\">%d</td><td width=\"70%%\">"
,n);
else
printf("<tr><td>%d</td><td>",n);
for (m=2;m<n-1;m++)
if (pierwsze[m] && pierwsze[n-m]) {
printf("=%d+%d",m,n-m);
break;
}
printf("</td></tr>\n");
}
}
printf("</table>\n");
}
Ten tekst nie podlega pod prawa autorskie. Jest zatem własnością publiczną, ponieważ jego autor udostępnił go na licencji public domain.
Tablica rozkładów na sumę 2 liczb pierwszych
[edytuj]ANSI C
[edytuj]
Tablica rozkładów na sumę 2 liczb pierwszych
Coded by MS
#include <stdio.h>
#include <math.h>
#define RANGE 2000 //1000000
#define PRIMESCOUNT 303 //78498
long eratosthenes(long);
long setprimesarray(long[]);
int main(void) {
long primes[PRIMESCOUNT];
short found = 0;
setprimesarray(primes);
printf("\n");
for(int i = 4; i <= RANGE; i++) {
found = 0;
if(i % 2 == 0) {
for(int j = 0; j < PRIMESCOUNT; j++) {
for(int k = 0; k < PRIMESCOUNT; k++) {
if(primes[j] + primes[k] == i) {
printf("%d = %ld + %ld\n", i, primes[j], primes[k]);
found = 1;
break;
}
}
if(found == 1)
break;
}
}
}
printf("\n");
return 0;
}
long eratosthenes(long n) {
int squarefromn;
squarefromn = sqrt(n);
for(int i = 2; i <= squarefromn + 1; i++) {
if(n % i == 0) {
return 0;
} else if(i == squarefromn) {
return 1;
}
}
}
long setprimesarray(long primearray[]) {
int count = 4, testednum = 11;
primearray[0] = 2;
primearray[1] = 3;
primearray[2] = 5;
primearray[3] = 7;
while(count < PRIMESCOUNT) {
if(eratosthenes(testednum) == 1) {
primearray[count] = testednum;
count++;
}
testednum++;
}
return *primearray;
}