Kody źródłowe/Tablica liczb pierwszych i rozkładów na czynniki pierwsze

Z Wikibooks, biblioteki wolnych podręczników.
Przejdź do nawigacji Przejdź do wyszukiwania
Tablica liczb pierwszych i rozkładów na czynniki pierwsze
Kod źródłowy
Tablica liczb pierwszych i rozkładów na czynniki pierwsze

ANSI C[edytuj]

Kod w języku ANSI C według którego została wygenerowana tablica liczb pierwszych i rozkładów na czynniki pierwsze:

#include <stdio.h>
#include <memory.h>
#include <math.h>
#include <stdlib.h>

int main() {
	int min,max;
	int n,m,p,pierwiastek;
	int pierwsza;
	int licznik;
	char *pierwsze;

	do {
		fprintf(stderr,"Poczatek przedzialu: ");
		scanf("%d",&min);
	} while (min<=1);
	do {
		fprintf(stderr,"\nKoniec przedzialu  : ");
		scanf("%d",&max);
	} while (max<min);

	pierwsze=(char*)malloc(max+1); /*new char[max+1];*/
	memset(pierwsze,1,max+1);
	
	printf(
		"<table border=\"1\" width=\"33%%\" style=\"text-align: left\">\n"
		"<caption>Tablica rozkładów na czynniki pierwsze dla liczb od %d do %d</caption>\n"
		"<tr>\n"
		"<th width=\"20%%\">Liczba</th>\n"
		"<th width=\"80%%\">Czynniki pierwsze</th>\n"
		"</tr>\n"
		,min,max);

	licznik=1;
	for (n=2;n<=max;n++) {
		if (n>=min)
			if (n%100==0)
				printf(
				 "</table>\n"
				 "<table border=\"1\" width=\"33%%\" style=\"text-align: left\">\n"
				 "<tr><td width=\"20%%\">%d</td><td width=\"80%%\">"
				 ,n);
			else
				printf("<tr><td>%d</td><td>",n);
		p=n;
		pierwsza=1;
		pierwiastek=(int)(sqrt(p)+0.5);
		for (m=2;m<=pierwiastek;m++)
			if (pierwsze[m] && p%m==0) {
				if (n>=min)
					printf(pierwsza ? "=%d" : "&times;%d",m);
				pierwsza=0;

				p/=m;
				m--;
				pierwiastek=(int)(sqrt(p)+0.5);
			}
		if (pierwsza) {
			if (n>=min)
				printf("Liczba pierwsza nr %d",licznik);
			licznik++;
		} else {
			if (n>=min)
				printf("&times;%d",p);
			pierwsze[n]=0;
		}
		if (n>=min)
			printf("</td></tr>\n");
	}
	printf("</table>\n");

	return 0;
}

Python[edytuj]

Prostsza metoda od powyższej w języku Python. Coded by MS

def findfactors(number):
    listfactors = list()
    tmpnum = number
    
    factor = 1
    if(number > 1):
        while(number >= 2):
            factor += 1
            if(number % factor == 0):
                listfactors.append(factor)
                number /= factor
                factor = 1
        print "Factors of",tmpnum,":",listfactors
    else:
        print number,"- Positive integer must be greater then 1"

number = input("Enter positive integer > 1 for start sequence: ")
stopsequence = input("How many numbers do you want to factorize: ")
stopsequence += 1
print "\n"

for x in xrange(stopsequence):
    findfactors(number)
    number += 1

ANSI C[edytuj]

To samo co powyżej tylko w ANSI C. Coded by MS

#include <stdio.h>

void printfactors(long);

int main(void) {
    long testnum, start, stop;
    
    printf("Enter positive integer > 1 for start sequence: ");
    scanf("%ld", &start);
    printf("Enter last number to factorize: ");
    scanf("%ld", &stop);
    
    testnum = start;
    for(start; start <= stop; start++) {
        printfactors(testnum);
        testnum++;
    }
    
    printf("\n\n");
    
    return 0;
}

void printfactors(long n) {
    long factor = 1;
    
    printf("\n%ld = ", n);
    
    while(n >= 2) {
        factor++;
        if(n % factor == 0) {
            printf(" %ld  ", factor);
            n /= factor;
            factor = 1;
        }
    }
}


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.