| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Program A2_17a; Var   n,k:integer;   begin     readln(n);     k:=2;     while
 (k*k<=n)  do      begin         while (n mod k=0) do          begin
 write(k,' '); ;n:=n div k; end;        
 INC(k);      end;     if
 (n>1) then write(n);     writeln;     readln;   end. | // Program A2.17a; #include <iostream> 
 using namespace std; 
 int main() {     int n,
 k=2;     cin>>n;    
 while(k*k<=n)     {        
 while(n%k==0){cout<<k<<" "; ;n=n/k;}        k++;     }    
 if(n>1)cout<<n;    
 cout<<endl;     return 0; } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Program A2_17b; Var   n:integer;
 k:integer=2; p:integer=2;   begin    readln(n);
 ;     while(k*k<=n ) do      begin         while
 (n mod k=0) do        begin
 write(k,' '); ;n:=n div k; end;        if(k<5) then INC(k)                 
 else       begin k:=k+p; p:=6-p; end;      end;       if
 (n>1) then write(n);     writeln;     readln;   end. | // Program A2.17b; #include <iostream> 
 using namespace std; 
 int main() {  int
 n,k=2,p=2;    
 cin>>n;    
 while(k*k<=n )     {  while(n%k==0){cout<<k<<" "; n=n/k;}        
 if(k<5) k++;         else
 {k=k+p; p=6-p;}     }    
 if(n>1)cout<<n;     
 cout<<endl;     return 0; } | 
Разложить натуральное число N на простые делители.
Для этой задачи мы также разработали две программы.
В программе 2.17а, начиная с  k=2 (строка 6) выполняем: если число n  делится на k, то выводим на экран это k и число n  делим на k, то есть удаляем делитель k из числа – строка 10. Если не делится на k, то увеличиваем k на 1 (строка 11) и снова выполняем предыдущие действия. Алгоритм сводится к следующему: удаляем все делители 2, если они есть, Затем все делители 3, затем проверяем 4 ( все равно на 4 делиться не будет, так как делители 2, если они были, все удалены раньше).  Затем 5, затем 6 (на 6 все равно не разделится, ведь делители и 2 и 3 ( если они были) были удалены на предыдущем этапе. Остаются только простые делители.
Программа 2.17b отличается от предыдущей тем, что проверяем деление не на  все числа подряд, а только на «кандидаты» в простые числа, которые вычисляем по формуле 6*k +/- 1, как в предыдущей программе. Так как «кандидаты» в простые числа начинаются с числа 5, то в программе проверяются числа 2, 3, 4, а с 5 уже по формуле – строки 10 12.



















