דער פראגראם
ציילט פשוט די ווערטער, און נאך יעדע פינפטע ווארט לייגט עס א newline. דאס איז נישט צו אינטערעסאנט, ובכלל איז דאס אן ארבייט וואס געהער פאר א C like language, אסאך אנדערע שפראכן וואלטן דא -אומבארעכטיגטערהייט- אויסגעזעהן אומבאלומפערט.אלס בעסערע ביישפיל, וועלן מיר שרייבן א פראגראם אויסצורעכענען אלע primes ביז א געוויסן נומער. א prime איז א נומער העכער 2 וואס ווערט נישט צוטיילט דורך קיין שום אנדערע נומער (אויסער זיך זעלבסט און 1). למשל, שרייבנדיג "primes 10" זאל דאס אויסרעכענען 3, 5, 7. מיר וועלן פרובירן צו גיין וואס פשוט'ער, נישט נוצנדיג צופיל קונצען (בפרט אזעלכע וואס זענען ספעציפיש צו א געוויסע שפראך), כדי מ'זאל בעסער קענען פארגלייכען די שפראכן. אויך דער עצם algorithm וועט זיין דאס פשוט'סטע וואס מעגליך, נעמליך Trial division
.וועלן מיר אנהייבן מיט C
: קאוד: וועל אויס אלע
// Prime Number Finder in C
// אוהב חכמה
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
unsigned int number, root, factor, max;
char isPrime;
if(argc < 2)
{
printf("Usage: primes <MAX NUM>\n");
return 1;
}
else
{
max = atoi(argv[1]);
}
if(max < 1)
{
printf("Invalid MAX NUM specified\n");
return 1;
}
for(number = 3; number <= max; number += 2)
{
root = (int) sqrt((double) number);
isPrime = 1;
for(factor = 3; factor <= root; factor += 2)
{
if(! (number % factor))
{
isPrime = 0;
break;
}
}
if(isPrime) printf("%d\n", number);
}
return 0;
}
און יעצט אנדערע C like languages: Awk
: קאוד: וועל אויס אלע
#!/usr/bin/awk -f
# Prime Number Finder in AWK
# אוהב חכמה
{ max = $1; }
END {
if(max < 1)
{
print "Usage: primes <MAX NUM>"
}
else
for (number = 3; number < max ; number += 2)
{
root = sqrt(number) + 1
isPrime = 1
for (factor = 3; factor < root; factor += 2)
{
isPrime = number % factor
if( isPrime == 0)
{
break
}
}
if(isPrime != 0)
{
print number
}
}
}
Java
: קאוד: וועל אויס אלע
// Prime Number Finder in Java
// אוהב חכמה
class primes
{
public static void main(String[] s)
{
if(s.length < 1)
{
System.out.println("Usage: primes <MAX NUM>\n");
System.exit(1);
}
int max = Integer.valueOf(s[0]).intValue();
if(max < 1)
{
System.out.println("Invalid Max Num\n");
System.exit(1);
}
for(int number = 3; number <= max; number += 2)
{
int root = (int)Math.sqrt(number);
boolean isPrime = true;
for(int factor = 3; factor <= root; factor += 2)
{
if( (number % factor) == 0)
{
isPrime = false;
break;
}
}
if(isPrime)
{
System.out.println(number);
}
}
}
}
#C
: קאוד: וועל אויס אלע
// Prime Number Finder in C#
// אוהב חכמה
using System;
class Primes
{
private static void Main(String[] argv)
{
int max = 0;
if(argv.Length >= 1)
{
try
{
max = (int)Convert.ToDouble(argv[0]);
}
catch
{
Console.WriteLine("Invalid Max Num");
return;
}
}
else
{
Console.WriteLine("Usage: primes <MAX NUM>");
return;
}
for(int number = 3; number <= max; number += 2)
{
int root = (int) Math.Sqrt(number);
int isPrime = 1;
for(int factor = 3; factor <= root; factor += 2)
{
isPrime = number % factor;
if( isPrime == 0)
{
break;
}
}
if(isPrime != 0)
{
Console.WriteLine(number);
}
}
}
}
הערה: כ'האב זיך נישט געלערנט #C, די קאוד איז באזירט אויף אביסל בלעטערן דא און דארט, מעגליך אז ס'הייבט נישט אהן צו ארבייטן.
Objective-C
: קאוד: וועל אויס אלע
// Prime Number Finder in Objective C
// אוהב חכמה
#include <objc/Object.h>
#include "math.h"
@interface Primes: Object
{
}
- print:(unsigned int)max;
@end
@implementation Primes
- print:(unsigned int)max
{
unsigned int number, root, factor;
char isPrime;
for (number = 3; number <= max; number += 2)
{
root = (unsigned int)sqrt(number);
isPrime = 1;
for(factor = 3; factor <= root; factor += 2)
{
if( !(number % factor))
{
isPrime=0;
break;
}
}
if(isPrime)
{
printf("%d\n", number);
}
}
}
@end
int main(int argc, char *argv[])
{
unsigned int max;
Primes *primes;
if(argc <= 1)
{
printf("Usage: primes <MAX NUM>\n");
return(1);
}
max = atoi(argv[1]);
if(max < 1)
{
printf("Invalid Max Num\n");
return(1);
}
primes = [Primes alloc];
[primes print:max];
}
Python
: קאוד: וועל אויס אלע
#!/usr/bin/env python
# Prime Number Finder in Python
# אוהב חכמה
import sys
import math
try: max = int(sys.argv[1]);
except:
print "Usage: primes <MAX NUM>"
sys.exit()
if max < 1:
print "Invalid MAX NUM"
sys.exit()
for num in range(3, max, 2) :
root = math.sqrt(num) + 1
isPrime = 1
for test in range(3, root, 2):
isPrime = num % test
if isPrime == 0:
break
if isPrime != 0 :
print num
Perl
: קאוד: וועל אויס אלע
#!/usr/bin/perl
# Prime Number Finder in PERL
# אוהב חכמה
if(@ARGV > 0)
{
$max = $ARGV[0];
}
else
{
print "Usage: primes <MAX NUM>\n";
exit;
}
if($max < 1)
{
print "Invalid MAX NUM\n";
exit;
}
for($num = 3; $num < $max; $num += 2)
{
$root = sqrt($num);
$isPrime = 1;
for($factor = 3; $factor <= $root; $factor += 2)
{
if(!($num % $factor))
{
$isPrime = 0;
last;
}
}
if($isPrime == 1) {print "$num\n";}
}
און אפאר פון די אנדערע סארט ( דאעפענען זיך די נייע וועלטן...). Scheme
: קאוד: וועל אויס אלע
;; Prime Number Finder in Scheme
;; אוהב חכמה
(define (check num factor MAX)
(if (> factor MAX)
1
(if (= (modulo num factor) 0)
0
(check num (+ factor 2) MAX)
)
)
)
(define (primes num MAX)
(if (<= num MAX)
(and
(if (not (= (check num 3 (sqrt num)) 0))
(and (display num) (display "\n"))
)
(primes (+ num 2) MAX)
)
)
)
און זיין גרעסערע ברודער Common Lisp
: קאוד: וועל אויס אלע
; Prime Number Finder in Common Lisp
; אוהב חכמה
(defun check (max i sq)
(if (> i sq)
(format t "~d~%" max)
(if (not (= (mod max i) 0))
(check max (+ i 2) sq))))
(defun _primes (max i)
(if (< i max)
(progn
(check i 3 (sqrt i))
(_primes max (+ i 2)))))
(defun primes (max)
(_primes max 3))
Rebol
: קאוד: וועל אויס אלע
REBOL [
Title: "Prime Number Finder in Rebol"
Author: אוהב חכמה
File: %primes.r
]
cl_args: make block! system/script/args
max: either none? cl_args/1 [""] [to-integer cl_args/1]
for num 3 max +2 [
sq: to-integer(square-root(num))
isp: 1
for i 3 sq +2 [
isp: num // i
if isp = 0 [
break
]
]
if isp <> 0 [ print num ]
]
OCaml
: קאוד: וועל אויס אלע
(* prime number finder in OCaml
אוהב חכמה *)
let primes max =
let sq = ref 2 in
let sqm = ref 4 in
let num = ref 3 in
let m = ref 0 in
while !num <= !max do
let i = ref 3 in
let stop = ref false in
m := 1;
while !i <= !sq && not !stop do
m := (!num mod !i);
if !m = 0 then
stop := true;
i := !i + 2
done;
if not (!m = 0) then
(print_int(!num);
print_newline());
if !num >= !sqm then
(sq := !sq+1; sqm := !sq * !sq);
num := !num + 2
done;;
let max = ref (int_of_string Sys.argv.(1)) in
if !max < 1 then (print_string("Invalid Max Num\n"); exit(1););
primes(max);
Haskell
: קאוד: וועל אויס אלע
-- Prime Number Finder in Haskell
-- אוהב חכמה
import System
check i c m | i > m = [(show c) ++ " "]
| rem c i > 0 = check (i + 2) c m
| otherwise = []
primes c m s t | c < m && c >= t = primes c m (s + 1) ((s + 1) * (s + 1))
| c < m = check 3 c s ++ primes (c + 2) m s t
| otherwise = []
main = do
x <- getArgs
print (primes 3 (read (x!!0)::Int) 2 4)
Forth
: קאוד: וועל אויס אלע
( Prime Number Finder in Forth
אוהב חכמה )
: check ( m num -- b )
{ m num }
\ var i
-1 3 -1
begin
over m <= and while
nip
dup 2 + swap num swap mod tuck ( # num + 2 # )
repeat
drop
;
: primes ( m sq sqm -- )
{ m sq sqm }
\ var i sq sqm
sqm sq 3
begin
dup m <= while
over over \ sq(max) num
check ( max num -- b )
if dup . CR then
2 +
rot ( sq num sqm ) over over
> if
rot ( num sqm sq )
1 + nip ( num sq )
dup dup * ( num sq sqm )
rot swap ( sq num sqm )
then
\ sqm sq 3
rot rot
repeat
drop drop drop
;
און צום לעצט, Prolog
: קאוד: וועל אויס אלע
% Prime Number Finder in Prolog
% אוהב חכמה
check(I,C,M,P) :-
P \= 0,
I > M.
check(I,C,M,P) :-
P \= 0,
NP is C mod I,
NI is I + 2,
check(NI,C,M,NP).
primes(M) :-
nl, primes(3,M,2).
primes(C,M,S) :- C > M.
primes(C,M,S) :-
check(3,C,S,1),
write(C), nl,
NC is C + 2,
NS is sqrt(NC),
primes(NC,M,NS).
primes(C,M,S) :-
NC is C + 2,
NS is sqrt(NC),
primes(NC,M,NS).