hm. hast du noch nie von Call by Reference gehört? Das ist zB Zeile 45. Wenn du in der Funktionsdeklaration ein & angibst, bedeutet dies, dass die Funktion nicht mit einer Kopie der Variablen, sondern direkt mit der Variablen arbeitet - Änderungen an der Variablen in der Funktion bedeuten also Änderungen der Variablen beim Aufrufer. Wenn du die Funktion aufrufst, wird das allerdings nicht noch einmal sonderlich gekennzeichnet, du steckst also die Variable einfach rein wie sonst auch (nur dass ohne & in der Funktionsdeklaration eben eine Kopie erzeugt wird, auf der die Funktion arbeitet).
73, 84, 109: Hier arbeitest du mit einem sogenannten Zeiger. Ein Zeiger ist eine Variable, der auf eine Stelle im Zeiger zeigt, daher der Name. Wenn dir Zeile 128 wirklich klar ist, dürfte dir das Konzept der Speicheradresse ja relativ bekannt sein - der Zeiger ist also eine Variable, die genau diese Speicheradresse beinhaltet. Ist jetzt ptr ein Zeiger, bekommst du den Wert, auf den dieser Zeiger zeigt, indem du den Zeiger dereferenzierst - *ptr geschrieben. Das passiert in Zeilen 73, 84. Die Funktion isPrime erwartet einen Zeiger auf einen unsigned integer - daher der Stern in Zeile 69. Da du aber nirgendwo einen Zeiger explizit anlegst, kannst du in Zeile 109 durch das & die Adresse übergeben, an der die Variable lowestDivisor gespeichert ist - das ist nichts anderes als ein Zeiger.
Ich empfehle dir ein gutes C-Buch anzugucken, da werden Zeiger nämlich meistens viel besser erklärt, als in C++-Dingern - in C sind Zeiger eben die einzige Möglichkeit, soetwas wie call by reference (siehe weiter oben) zu implementieren.
[edit] Achso: Leih dir das Buch in einer Bibliothek aus, bevor du es kaufst! Jeder kommt mit anderen Büchern anders zurecht als der nächste, alles andere ist sinnlos.