Kody źródłowe/Tablica rozkładów na sumę dwóch liczb pierwszych

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Tablica rozkładów na sumę dwóch liczb pierwszych
Kod źródłowy
Tablica rozkładów na sumę dwóch liczb pierwszych
Kod w języku ANSI C, według którego została wygenerowana tablica rozkładów na sumę dwóch liczb pierwszych:
#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");
}


Public Domain
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;
}