Advertisement
Guest User

C some random lab for Irene :D

a guest
Nov 23rd, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.62 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <string.h>
  4.  
  5. void AlgoritmulSundaram(bool marked[], int);
  6. int Roteste(int);
  7. int calculeazaDimensiunea(int);
  8.  
  9. void circularPrime(int n)
  10. {
  11.     int nNew = (n - 2) / 2;
  12.  
  13.     bool marked[nNew + 1];
  14.  
  15.     memset(marked, false, sizeof(marked));
  16.  
  17.     AlgoritmulSundaram(marked, nNew);
  18.  
  19.     printf("2 ");
  20.  
  21.     for (int i = 1; i <= nNew; i++)
  22.     {
  23.         if (marked[i] == true)
  24.             continue;
  25.  
  26.         int num = 2 * i + 1;
  27.         num = Roteste(num);
  28.  
  29.         while (num != 2 * i + 1)
  30.         {
  31.             if (num % 2 == 0)
  32.                 break;
  33.  
  34.             if (marked[(num - 1) / 2] == false)
  35.                 num = Roteste(num);
  36.             else
  37.                 break;
  38.         }
  39.  
  40.         if (num == (2 * i + 1))
  41.             printf("%d ", num);
  42.     }
  43. }
  44.  
  45. // Algoritmul lui Sieve of Sundaram
  46. void AlgoritmulSundaram(bool marked[], int nNew)
  47. {
  48.     // este prim daca indeplineste conditi i + j + 2ij aunde ere 1 <= i <= j
  49.     for (int i = 1; i <= nNew; i++)
  50.         for (int j = i; (i + j + 2 * i * j) <= nNew; j++)
  51.             marked[i + j + 2 * i * j] = true;
  52. }
  53.  
  54. int Roteste(int n)
  55. {
  56.     int rem = n % 10;
  57.     rem *= pow(10, calculeazaDimensiunea(n));
  58.  
  59.     n /= 10;
  60.     n += rem;
  61.     return n;
  62. }
  63.  
  64. int calculeazaDimensiunea(int n)
  65. {
  66.     int digit = 0;
  67.     while (n /= 10)
  68.         digit++;
  69.     return digit;
  70. }
  71.  
  72. int main(void)
  73. {
  74.     int n = 0;
  75.     printf("Introdu n\n");
  76.     scanf("%d", &n);
  77.     circularPrime(n);
  78.  
  79.     // In codeblocks comenteaza getchar()
  80.     getchar();
  81.     getchar();
  82.     // <--*********************-->
  83.  
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement