Subido por Spam Matt

Enunciat

Anuncio
Programació Paral·lela
Laboratori de Pràctiques
Curs 2020-21
• Introducció
Un cop fets els exercicis de problemes, us plantegem un problema una mica més
complex basat en un parell de definicions matemàtiques:
a. Divisors propis d’un número natural: són tots els factors del número,
excepte el propi número (p. ex. els divisors propis de 12 són 1, 2, 3, 4 i 6).
b. Suma alíquota d’un número natural: es denota com a 𝜎(𝑛) i es calcula
com la suma dels divisors propis d’n.
c. Números amics (amicables): són dos números x i y tal que 𝜎(𝑥) és igual
a y i 𝜎(𝑦)és igual a x (noteu que és similar però no igual a la definició de
números amigables que heu treballat en les sessions de problemes).
d. Números perfectes: són aquells números naturals que compleixen
𝜎(𝑛) = 𝑛.
La idea general d’aquest laboratori és la de fer un programa en c que trobi totes
les parelles de números amics i tots els números perfectes dins d’un cert rang de
números naturals donat.
• Descripció del Problema
El programa a desenvolupar rebrà per línia de comandes (arguments al main) els
límits inferior (low) i superior (high) del rang a tractar ([low,high]).
En primer lloc haurà de validar que aquests arguments siguin correctes: low i
high > 2 i high >= low.
Un cop fet això procedireu a fer la cerca de les parelles de números amics i la
llista de números perfectes dins del rang. Els primers els emmagatzemareu en una
matriu de dues files i tantes columnes com siguin necessàries, mentre que els segons els
emmagatzemareu en un array.
Finalment, mostrareu els resultats trobat per pantalla, fent servir les estructures
creades.
Com d’entrada no sabeu quantes parelles de números amics i quants números
perfectes trobareu en el rang indicat, caldrà que reserveu de forma dinàmica aquestes
dues estructures de dades fent servir com a guia el número d’elements al rang (highlow+1). En principi, les mateixes seran reduïdes, ja que, per exemple, el nombre de
parelles de números amics en el rang [2,10240] és de 5 i el de números perfectes és de
4.
L’algorisme per trobar les parelles de números amics i la llista de números
perfectes l’heu de dissenyar vosaltres, però us fem algunes consideracions inicials:
•
Si es dissenya una solució de força bruta (fet tots els càlculs necessaris per cada
parella de números considerats) aquest és un problema molt intensiu de còmput
•
(p. ex. trobar les 5 parelles en el rang [2,10240] ha trigat aproximadament 6
minuts en un processador i5). Ara bé, en aquest cas no es fa servir gens de
memòria.
Si es dissenya una solució més intel·ligent (es pre-calculen les alíquotes de tots
els números dins del rang), el problema pot requerir una quantitat de memòria
relativament important (4x(high-low+1) Bytes) que caldrà reservar de forma
dinàmica, però el còmput s’accelera de forma espectacular (p. ex. trobar les 5
parelles en el rang [2,10240] ha trigat aproximadament 0.37 seg en el mateix
processador, i.e., una acceleració de 1000X).
Us demanem desenvolupar les dues aproximacions:
•
•
Aproximació força bruta. Per trobar les parelles de números amics, per cada
parella de números considerada es fan els càlculs de les sumes alíquotes
corresponents. Per trobar el números perfectes, per cada número es fa el càlcul
de la seva suma alíquota.
Aproximació una mica més intel·ligent. Es pre-calculen les sumes alíquotes de
tots el números en el rang i després es busquen les parelles de números amics i
els números perfectes.
El programa haurà de tenir la següent funcionalitat:
a. Revisarà que els arguments són presents i consistents.
b. Crearà les estructures dinàmiques necessàries per resoldre el problema,
comprovant que no es produeixen errors.
c. Buscarà les parelles de números amics i els números perfectes amb
l’aproximació intel·ligent.
d. Si el número d’elements del rang és menor de 15000, farà el càlcul també
fent servir l’aproximació per força bruta.
e. Alliberarà la memòria reservada prèviament per les estructures
dinàmiques.
• Lliurament
Pel lliurament d’aquesta pràctica s’habilitarà un lliurament al CV que permetrà
pujar dos arxius per cada grup de pràctiques.
El primer arxiu serà un informe de dos o tres pàgines en el que incloureu:
1.
2.
3.
4.
5.
Noms i NIUS dels integrants del grup
Breu resum del plantejament del problema
Anàlisi del problema
Disseny de la solució
Resultat (s’han assolit els objectius?, proves realitzades, errors coneguts,
etc.)
6. Principals problemes (què us ha costat més?)
El segon arxiu serà el codi font (en un arxiu de text, és a dir, que pugui ser
compilat i provat) comentat de forma apropiada (comentaris aclaridors d’aquells punts
més complexes i comentaris generals per a totes les funcions).
Altres detalls del lliurament es proporcionaran en la descripció de la tasca al CV.
Descargar