June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
12
Task/Almost-prime/Factor/almost-prime.factor
Normal file
12
Task/Almost-prime/Factor/almost-prime.factor
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
USING: formatting fry kernel lists lists.lazy locals
|
||||
math.combinatorics math.primes.factors math.ranges sequences ;
|
||||
IN: rosetta-code.almost-prime
|
||||
|
||||
: k-almost-prime? ( n k -- ? )
|
||||
'[ factors _ <combinations> [ product ] map ]
|
||||
[ [ = ] curry ] bi any? ;
|
||||
|
||||
:: first10 ( k -- seq )
|
||||
10 0 lfrom [ k k-almost-prime? ] lfilter ltake list>array ;
|
||||
|
||||
5 [1,b] [ dup first10 "K = %d: %[%3d, %]\n" printf ] each
|
||||
25
Task/Almost-prime/GW-BASIC/almost-prime.gw-basic
Normal file
25
Task/Almost-prime/GW-BASIC/almost-prime.gw-basic
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
10 'Almost prime
|
||||
20 FOR K% = 1 TO 5
|
||||
30 PRINT "k = "; K%; ": ";
|
||||
40 LET I% = 2
|
||||
50 LET C% = 0
|
||||
60 WHILE C% < 10
|
||||
70 LET AN% = I%: LET AK% = K%: GOSUB 1000
|
||||
80 IF ISKPRIME <> 0 THEN PRINT USING "### "; I%;: LET C% = C% + 1
|
||||
90 LET I% = I% + 1
|
||||
100 WEND
|
||||
110 PRINT
|
||||
120 NEXT K%
|
||||
130 END
|
||||
|
||||
995 ' Check if n (AN%) is a k (AK%) prime
|
||||
1000 LET F% = 0
|
||||
1010 FOR II% = 2 TO AN%
|
||||
1020 WHILE AN% MOD II% = 0
|
||||
1030 IF F% = AK% THEN LET ISKPRIME = 0: RETURN
|
||||
1040 LET F% = F% + 1
|
||||
1050 LET AN% = AN% \ II%
|
||||
1060 WEND
|
||||
1070 NEXT II%
|
||||
1080 LET ISKPRIME = (F% = AK%)
|
||||
1090 RETURN
|
||||
|
|
@ -1,10 +1,17 @@
|
|||
isalmostprime(n, k) = sum(values(factor(n))) == k
|
||||
function almostprimes(N, k) # return first N almost-k primes
|
||||
P = Array(Int, N)
|
||||
using Primes
|
||||
|
||||
isalmostprime(n::Integer, k::Integer) = sum(values(factor(n))) == k
|
||||
|
||||
function almostprimes(N::Integer, k::Integer) # return first N almost-k primes
|
||||
P = Vector{typeof(k)}(N)
|
||||
i = 0; n = 2
|
||||
while i < N
|
||||
if isalmostprime(n, k); P[i += 1] = n; end
|
||||
if isalmostprime(n, k) P[i += 1] = n end
|
||||
n += 1
|
||||
end
|
||||
return P
|
||||
end
|
||||
|
||||
for k in 1:5
|
||||
println("$k-Almost-primes: ", join(almostprimes(10, k), ", "), "...")
|
||||
end
|
||||
|
|
|
|||
|
|
@ -11,9 +11,9 @@ fun Int.k_prime(x: Int): Boolean {
|
|||
|
||||
fun Int.primes(n : Int) : List<Int> {
|
||||
var i = 2
|
||||
var list = listOf<Int>()
|
||||
var list = mutableListOf<Int>()
|
||||
while (list.size < n) {
|
||||
if (k_prime(i)) list += i
|
||||
if (k_prime(i)) list.add(i)
|
||||
i++
|
||||
}
|
||||
return list
|
||||
|
|
|
|||
46
Task/Almost-prime/Modula-2/almost-prime.mod2
Normal file
46
Task/Almost-prime/Modula-2/almost-prime.mod2
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
MODULE AlmostPrime;
|
||||
FROM FormatString IMPORT FormatString;
|
||||
FROM Terminal IMPORT WriteString,WriteLn,ReadChar;
|
||||
|
||||
PROCEDURE KPrime(n,k : INTEGER) : BOOLEAN;
|
||||
VAR p,f : INTEGER;
|
||||
BEGIN
|
||||
f := 0;
|
||||
p := 2;
|
||||
WHILE (f<k) AND (p*p<=n) DO
|
||||
WHILE n MOD p = 0 DO
|
||||
n := n DIV p;
|
||||
INC(f)
|
||||
END;
|
||||
INC(p)
|
||||
END;
|
||||
IF n>1 THEN
|
||||
RETURN f+1 = k
|
||||
END;
|
||||
RETURN f = k
|
||||
END KPrime;
|
||||
|
||||
VAR
|
||||
buf : ARRAY[0..63] OF CHAR;
|
||||
i,c,k : INTEGER;
|
||||
BEGIN
|
||||
FOR k:=1 TO 5 DO
|
||||
FormatString("k = %i:", buf, k);
|
||||
WriteString(buf);
|
||||
|
||||
i:=2;
|
||||
c:=0;
|
||||
WHILE c<10 DO
|
||||
IF KPrime(i,k) THEN
|
||||
FormatString(" %i", buf, i);
|
||||
WriteString(buf);
|
||||
INC(c)
|
||||
END;
|
||||
INC(i)
|
||||
END;
|
||||
|
||||
WriteLn;
|
||||
END;
|
||||
|
||||
ReadChar;
|
||||
END AlmostPrime.
|
||||
|
|
@ -1,9 +1,14 @@
|
|||
: kprime(n, k)
|
||||
: kprime?( n k -- b )
|
||||
| i |
|
||||
0 2 n for: i [ while(n i /mod swap 0 &= ) [ ->n 1+ ] drop ] k == ;
|
||||
0 2 n for: i [
|
||||
while( n i /mod swap 0 = ) [ ->n 1+ ] drop
|
||||
]
|
||||
k ==
|
||||
;
|
||||
|
||||
: table(k)
|
||||
: table( k -- [] )
|
||||
| l |
|
||||
ListBuffer new ->l
|
||||
2 while (l size 10 <>) [ dup k kprime ifTrue: [ dup l add ] 1+ ]
|
||||
drop l ;
|
||||
Array new dup ->l
|
||||
2 while (l size 10 <>) [ dup k kprime? if dup l add then 1+ ]
|
||||
drop
|
||||
;
|
||||
|
|
|
|||
43
Task/Almost-prime/PureBasic/almost-prime.purebasic
Normal file
43
Task/Almost-prime/PureBasic/almost-prime.purebasic
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
EnableExplicit
|
||||
|
||||
Procedure.b kprime(n.i, k.i)
|
||||
Define p.i = 2,
|
||||
f.i = 0
|
||||
|
||||
While f < k And p*p <= n
|
||||
While n % p = 0
|
||||
n / p
|
||||
f + 1
|
||||
Wend
|
||||
p + 1
|
||||
Wend
|
||||
|
||||
ProcedureReturn Bool(f + Bool(n > 1) = k)
|
||||
|
||||
EndProcedure
|
||||
|
||||
;___main____
|
||||
If Not OpenConsole("Almost prime")
|
||||
End -1
|
||||
EndIf
|
||||
|
||||
Define i.i,
|
||||
c.i,
|
||||
k.i
|
||||
|
||||
For k = 1 To 5
|
||||
Print("k = " + Str(k) + ":")
|
||||
|
||||
i = 2
|
||||
c = 0
|
||||
While c < 10
|
||||
If kprime(i, k)
|
||||
Print(RSet(Str(i),4))
|
||||
c + 1
|
||||
EndIf
|
||||
i + 1
|
||||
Wend
|
||||
PrintN("")
|
||||
Next
|
||||
|
||||
Input()
|
||||
Loading…
Add table
Add a link
Reference in a new issue