Ασκήσεις-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 διαιρέτες.