Kody źródłowe/Tablica liczb pierwszych i rozkładów na czynniki pierwsze
ANSI C
edytujKod 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" : "×%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("×%d",p);
pierwsze[n]=0;
}
if (n>=min)
printf("</td></tr>\n");
}
printf("</table>\n");
return 0;
}
Python 2.0
edytujProstsza 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
edytujTo 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
edytujTo 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
edytujTo 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;
}
}
}
}
Ten tekst nie podlega pod prawa autorskie. Jest zatem własnością publiczną, ponieważ jego autor udostępnił go na licencji public domain.