Komendy zostaną wykonane 108*108, czyli 1016 razy. Dla przeszukania zakresu liczb do 1032 potrzebne będzie dodanie kolejnych pętli.
Problem wykonywania obliczeń na sprawdzanej liczbie wymaga bardziej złożonego rozwiązania. Wykorzystajmy metodę, używaną w bankowości do sprawdzania poprawności numerów rachunków bankowych. Postępując zgodnie z nią, modulo z danej liczby możemy obliczyć, dzieląc sprawdzaną liczbę na części. Gdy to zrobimy obliczamy modulo z pierwszej części, a wynik dopisujemy na początku następnego fragmentu liczby. Obliczamy modulo z otrzymanej liczby i ponownie wynik umieszczamy na początku kolejnej części liczby. Na przykład:
Szukamy wyniku następującego działania: 21357648 % 7 Podzielmy liczbę na części:
21 -35-76-48
Obliczmy modulo z pierwszego fragmentu liczby:
21% 7 = 0
Dopiszmy wynik na początku drugiego fragmentu i obliczmy modulo:
035 % 7 = 0 (liczymy jak 35 % 7)
Powtórzmy powyższe czynności aż do uzyskania ostatecznego wyniku:
076% 7 = 6 648 % 7 = 4
Otrzymaliśmy ostatecznie 4, więc reszta z dzielenia 21357648 przez 7 wynosi 4.
Dostosujmy tę metodę do potrzeb programu i możliwości języka. Liczbę będziemy przechowywać w postaci rozbitej na tablicy spriiczba. Obliczmy na jak małe fragmenty musimy dzielić liczbę. Największa liczba pierwsza z zakresu do 108 to 99999989. Oznacza to, że podczas sprawdzania kolejnego zakresu największa reszta z dzielenia jaką możemy uzyskać ma wartość 99999988. Aby nie wykroczyć poza zakres zmiennej, po dopisaniu tej reszty przed fragmentem liczby musimy dzielić sprawdzaną liczbę na części jednocyfrowe. Dołączmy do programu dwie funkcje. Pierwsza z nich będzie zwiększać przechowywaną na tablicy liczbę (nadajmy tej funkcji nazwę powiększ). Druga będzie odpowiedzialna za wykonywanie obliczeń (nazwiemy ją dziel).
--------------ŹRÓDŁO 6--------------
1. void powiększ() {
2. int wskaznik=l;//wskaźnik rządu na którym operujemy (początkowo wskazuje
//na rząd jedności)
3. char flagaws=0;
4. spriiczba[wskaźnik]+=2;//powiększamy rząd jedności
5. if(spriiczba[wskaźnik]>10){//jeśli wartość rządu jedności przekroczy 10
//musimy ją zredukować do 1 i powiększyć //liczbę w kolejnym rzędzie
6. spriiczba[wskaźnik]=1;
7. wskaznik++;
8. while(flagaws==0) {
9. spriiczba[wskaźnik]=sprliczba[wskaźnik]+1;
10. if(spriiczba[wskaźnik]=10){
11. spriiczba[wskaźnik]=0;
12. wskaznik++;
13. Jelse flagaws=l;
14. }//koniec while
6