Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions dana/programs/factors.dana
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
(*
This program reads a positive integer from the user and prints all its factors.
For the special cases where the number is 2 or 3, it directly prints the two factors: 1 and the number.
*)

def main
var n is int
var i is int

# Read the input
n := readInteger()

writeString: "Factors:"

# If n is 2 or 3, print the factors 1 and n, then exit
if n = 2 or n = 3:
writeString: " 1 "
writeInteger: n
exit

# For all other numbers, iterate from 1 to n and print divisors
i := 2
loop:
if i > n / 2: break
elif n % i = 0:
writeString: " "
writeInteger: i # i is a factor of n
i := i + 1
1 change: 1 addition & 0 deletions dana/programs/factors.input
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
12
1 change: 1 addition & 0 deletions dana/programs/factors.result
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Factors: 2 3 4 6
35 changes: 35 additions & 0 deletions dana/programs/primeFactors.dana
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
def main
# Helper procedure: prints the prime factors of n
def primeFactors: n as int
# Divide out all factors of 2
loop:
if n % 2 = 0:
writeString: " 2"
n := n / 2
else: break

var i is int
i := 3
# Loop over odd numbers starting from 3 while i*i <= n
loop:
if i * i <= n:
loop:
if n % i = 0:
writeString: " "
writeInteger: i
n := n / i
else: break
i := i + 2
else: break

# If remaining n is a prime greater than 2, print it
if n > 2:
writeString: " "
writeInteger: n

# Main program: Read input and call primeFactors
var num is int
num := readInteger()
writeString: "Prime factors:"
primeFactors: num
writeString: "\n"
1 change: 1 addition & 0 deletions dana/programs/primeFactors.input
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
153569623460
1 change: 1 addition & 0 deletions dana/programs/primeFactors.result
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Prime factors: 2 2 5 11 223 3130241