Ασκήσεις-6

1) Eνα πρόγραμμα που προσθέτει τους αριθμους 1, 2, ..., Ν, θα μπορούσε να είναι το

> mySum:= proc(N::integer)

> sum(i,i=1..N); end;

Ξαναγράψτε το 2 φορές χρησιμοποιώντας, την 1η φορά τις εντολές for ... και την 2η τις while ... .

>

2) Γράψτε με τρείς διαφορετικούς τρόπους ένα πρόγραμμα που προσθέτει τους αριθμούς:

> 1 , 2^k, 3^k, ..., N^k .

3) Εξηγήστε τι κάνει το επόμενο πρόγραμμα:

> GenFib:=proc(a, b, n::integer)

> if n=0 then a;

> elif n=1 then b;

> else GenFib(a,b, n-1)+GenFib(a,b, n-2) fi;

> end;

4) Γράψτε ένα πρόγραμμα που τυπώνει την λίστα των πρώτων Ν πρώτων αριθμών, 2, 3, 5, 7, .. κτλ. χρησιμοποιώντας τις εντολές while και isprime.

5) Γράψτε ένα πρόγραμμα που εξετάζει έναν ακέραιο ν και τυπώνει 0 εάν είναι πρώτος ή κ εάν δεν είναι. Το κ να είναι το πλήθος των μη-πρώτων αριθμών που έπονται του ν..

6) Γράψτε ένα πρόγραμμα που βρίσκει τον μικρότερο ακέραιο x, έτσι ώστε οι : x, x+1, x+2, ..., x+N να μήν είναι πρώτοι. Δοκιμάστε το γιά Ν=10, 20, ..., 50. O x=370262 έχει τους επόμενους 110 ακέραιους μή πρώτους.

7) Γράψτε ένα πρόγραμμα reverse(N) που παίρνει ένα ακέραιο π.χ. 12345 και αντιστρέφει τα ψηφία του: 54321. Συμπληρώστε το με ένα πρόγραμμα που βρίσκει το πλήθος των ακεραίων ν < M, γιά τους οποίους ο ν και ο reverse(ν) συμπίπτουν. π.χ. οι μονοψήφιοι, τα 11, 22, 33, ..., 121, κτλ..

8) Φτιάξτε ένα πρόγραμμα της μορφής:

> half:= proc( f, a, b )

το οποίο παίρνει σαν ορίσματα μιά πραγματική συνάρτηση και δύο αριθμούς, γιά τους οποίους f(a)*f(b)<0 και διαιρώντας διαδοχικά το διάστημα [a,b] ευρίσκει ρίζα της εξίσωσης f(x)=0.

>

9) Πόσοι φυσικοί αριθμοί < 100000 δεν είναι της μορφής x^2, x^3 , x^5;

10) Γράψτε ένα πρόγραμμα που υπολογίζει όλους τους διαιρέτες ενός ακεραίου. Βρήτε τον μικρότερο ακέραιο που έχει ακριβώς 28 διαιρέτες.