Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- void AlgoritmulSundaram(bool marked[], int);
- int Roteste(int);
- int calculeazaDimensiunea(int);
- void circularPrime(int n)
- {
- int nNew = (n - 2) / 2;
- bool marked[nNew + 1];
- memset(marked, false, sizeof(marked));
- AlgoritmulSundaram(marked, nNew);
- printf("2 ");
- for (int i = 1; i <= nNew; i++)
- {
- if (marked[i] == true)
- continue;
- int num = 2 * i + 1;
- num = Roteste(num);
- while (num != 2 * i + 1)
- {
- if (num % 2 == 0)
- break;
- if (marked[(num - 1) / 2] == false)
- num = Roteste(num);
- else
- break;
- }
- if (num == (2 * i + 1))
- printf("%d ", num);
- }
- }
- // Algoritmul lui Sieve of Sundaram
- void AlgoritmulSundaram(bool marked[], int nNew)
- {
- // este prim daca indeplineste conditi i + j + 2ij aunde ere 1 <= i <= j
- for (int i = 1; i <= nNew; i++)
- for (int j = i; (i + j + 2 * i * j) <= nNew; j++)
- marked[i + j + 2 * i * j] = true;
- }
- int Roteste(int n)
- {
- int rem = n % 10;
- rem *= pow(10, calculeazaDimensiunea(n));
- n /= 10;
- n += rem;
- return n;
- }
- int calculeazaDimensiunea(int n)
- {
- int digit = 0;
- while (n /= 10)
- digit++;
- return digit;
- }
- int main(void)
- {
- int n = 0;
- printf("Introdu n\n");
- scanf("%d", &n);
- circularPrime(n);
- // In codeblocks comenteaza getchar()
- getchar();
- getchar();
- // <--*********************-->
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement