Przejdź do zawartości

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

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

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 2.0

[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
        if(len(listfactors) == 1):
            print("No Factors found for: [",tmpnum,"]  \t\t- Prime Number Found")
            return False
        elif(len(listfactors) > 1):
            print("Factors of",tmpnum,":",listfactors)
            return True
        else:
            print(number,"- Positive integer must be greater then 1")

comp = 0
primenum = 0
number = input("\nEnter positive integer > 1 for start sequence: ")
stopsequence = input("How many numbers do you want to factorize: ")
number = int(number) - 1
stopsequence = int(stopsequence) + 1
print("\n")


for x in range(stopsequence):
    number += 1
    if(findfactors(number) == True):
        comp += 1
    else:
        primenum += 1

print("\nIn requested range found: \n",comp," composite numbers\n",primenum," prime numbers\n")
print(" --------- Coded by MS ---------\n")

Python 3.0

[edytuj]

Ładniejsza, kolorowa wersja w języku Python3. 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
        if(len(listfactors) == 1):
            print("\033[1;32mNo Factors found for: [",tmpnum,"]  \t\t- Prime Number Found")
            return False
        elif(len(listfactors) > 1):
            print("\033[1;31mFactors of",tmpnum,":",listfactors)
            return True
        else:
            print(number,"- Positive integer must be greater then 1")

comp = 0
primenum = 0
number = input("\nEnter positive integer > 1 for start sequence: ")
stopsequence = input("How many numbers do you want to factorize: ")
number = int(number) - 1
stopsequence = int(stopsequence) + 1
print("\n")


for x in range(stopsequence):
    number += 1
    if(findfactors(number) == True):
        comp += 1
    else:
        primenum += 1

print("\n\033[0;39mIn requested range found: \n",comp,"composite numbers\n",primenum,"prime numbers\n")
print("\033[1;37m --------- Coded by MS ---------\n")

ANSI C

[edytuj]

To samo co powyżej tylko w ANSI C. Coded by MS (zapoznaj się z funkcją faktoryzującą tego programu i tego pierwszego, a zrozumiesz czym jest "Thumb Rule" ;) )

#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;
        }
    }
}

Pascal

[edytuj]

To samo co powyżej tylko w języku PASCAL. Coded by MS

program fact;
     var factor, i, j, licznik:integer;

procedure GetFactors(n:integer);
begin
     factor := 1;
     write(n, '   =  ');

     while n >= 2 do
     begin
          inc(factor);
          if n mod factor = 0 then
          begin
               write('  ', factor, '  ');
               n := n div factor;
               factor := 1;
          end;
     end;
end;

begin
     writeln;
     write('Podaj liczbe > 1 od ktorej rozpoczac faktoryzowanie liczb: ');
     readln(i);
     write('Podaj liczbe na ktorej zakonczyc faktoryzowanie liczb: ');
     readln(j);
     writeln;
     for licznik := i to j do
     begin
          GetFactors(licznik);
          writeln;
     end;
     writeln;
end.

Java

[edytuj]

To samo co powyżej tylko w języku JAVA. Coded by MS

package factorization;

import java.util.Scanner;

/**
 *
 * @author MS
 */
public class Factorization {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner read = new Scanner(System.in);
        long testnum, start, stop;
        
        System.out.print("\nEnter number > 1 for start factorize sequence: ");
        start = read.nextLong();
        System.out.print("Enter last number to factorize: ");
        stop = read.nextLong();
        
        testnum = start;
        while(stop >= start) {
            printfactors(testnum);
            testnum++;
            start++;
        }
        
        System.out.print("\n\n");
        
        System.exit(0);
    }
    
    public static void printfactors(long n) {
        long factor = 1;
    
        System.out.print("\n "+ n +"   =   ");
    
        while(n >= 2) {
            factor++;
            if(n % factor == 0) {
                System.out.print(" "+ 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.