Две программы на C++ и Pascal

Две программы

Проверка числа $2 \le N \le 10^{12}$ на простоту

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. bool isPrime(long long n) {
  6.     // Если паскалистам приходится объявлять свои переменные в начале
  7.     // каждой процедуры, то сишники могут объявить переменную в любом
  8.     // месте кода. Но сделать это надо, конечно, до её использования.
  9.  
  10.     long long i = 2;
  11.     bool flag = true;
  12.    
  13.     while (i * i <= n && flag) {
  14.         if (n % i == 0)
  15.             flag = false;
  16.         i++;
  17.     }
  18.    
  19.     return (flag || n == i);
  20. }
  21.  
  22. // В языке С++ весь код лежит в процедурах и функциях. Договорились то,
  23. // с чего должно начинаться исполнение программы, класть в функцию main.
  24.  
  25. int main() {
  26.     long long n;
  27.     cin >> n;
  28.  
  29.     if (isPrime(n))
  30.         cout << "prime" << endl;
  31.     else
  32.         cout << "composite" << endl;
  33.  
  34.     return 0;
  35. }
  36.  
  1. {$APPTYPE CONSOLE}
  2.  
  3. uses SysUtils;
  4.  
  5. function isPrime(n: int64): boolean;
  6. var
  7.   i: int64;
  8.   flag: boolean;
  9. begin
  10.   i := 2;
  11.   flag := true;
  12.  
  13.   while (i * i <= n) and flag do begin
  14.     if n mod i = 0 then
  15.       flag := false;
  16.     inc(i);
  17.   end;
  18.  
  19.   result := flag or (n = i);
  20. end;
  21.  
  22. var
  23.   n: int64;
  24.  
  25. begin
  26.  
  27.   read(n);
  28.  
  29.   if isPrime(n) then
  30.     writeln('prime')
  31.   else
  32.     writeln('composite');
  33.  
  34.   // Паскалисты могут написать здесь exit(0).
  35. end.
  36.  

Обход в глубину: дана матрица смежности, подсчитать количество компонент связности

  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int MAXN = 1000;
  6.  
  7.  
  8. int n, a[MAXN][MAXN], counter = 0;
  9. bool visited[MAXN];
  10.  
  11.  
  12. void dfs(int v) {
  13.  
  14.  
  15.  
  16.     visited[v] = true;
  17.  
  18.     for (int i = 0; i < n; ++i)
  19.         if (a[v][i] == 1 && !visited[i])
  20.             dfs(i);
  21. }
  22.  
  23. int main() {
  24.    
  25.     cin >> n;
  26.  
  27.     for (int i = 0; i < n; ++i)
  28.         for (int j = 0; j < n; ++j)
  29.             cin >> a[i][j];
  30.  
  31.     for (int i = 0; i < n; ++i)
  32.         visited[i] = false;
  33.  
  34.     for (int i = 0; i < n; ++i)
  35.         if (!visited[i]) {
  36.             counter++;
  37.             dfs(i);
  38.         }
  39.  
  40.     cout << "Number of connected components: " << counter << endl;
  41.  
  42.     return 0;
  43. }
  44.  
  1. {$APPTYPE CONSOLE}
  2.  
  3. uses SysUtils;
  4.  
  5. const MAXN = 1000;
  6.  
  7. var
  8.   n, counter, i, j: integer;
  9.   a: array [0..MAXN - 1, 0..MAXN - 1] of integer;
  10.   visited: array [0..MAXN] of boolean;
  11.  
  12. procedure dfs(v: integer);
  13. var
  14.   i: integer;
  15. begin
  16.   visited[v] := true;
  17.  
  18.   for i := 0 to n - 1 do
  19.     if (a[v][i] = 1) and not visited[i] then
  20.       dfs(i);
  21. end;
  22.      
  23. begin
  24.   counter := 0;
  25.   read(n);
  26.  
  27.   for i := 0 to n - 1 do
  28.     for j := 0 to n - 1 do
  29.       read(a[i][j]);
  30.  
  31.   for i := 0 to n - 1 do
  32.     visited[i] := false;
  33.  
  34.   for i := 0 to n - 1 do
  35.     if not visited[i] then begin
  36.       inc(counter);
  37.       dfs(i);
  38.     end;
  39.  
  40.   writeln('Number of connected components: ', counter);
  41.  
  42.  
  43. end.
  44.