algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Test pierwszości - test Fermata - Implementacja w C/C++
Ocena użytkownikóww: *****  / 6
SłabyŚwietny
Nadesłany przez Tomasz Lubiński, 26 kwietnia 2007 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.

Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.

Fermat.c:
// Test pierwszości - test Fermata
// www.algorytm.org
// Tomasz Lubinski (c) 2007

#include <stdio.h>
#include <stdlib.h>

// calculates a^b mod m
int power_modulo_fast(int a, int b, int m)
{
   int i;
   int result = 1;
   long int x = a%m;

   for (i=1; i<=b; i<<=1)
   {
      x %= m;
      if ((b&i) != 0)
      {
         result *= x;
         result %= m;
      }
      x *= x;
   }

   return result%m;
}

//Fermat test
//retrun: 1 - probably prime
//        0 - not prime
int Fermat(int n, int k)
{
   int a, i;
   srand(time(NULL));

   if (n<4)
   {
      return 1;
   }

   for (i=0; i<k; i++)
   {
      a = 2+(int) ((n-2)*rand()/(RAND_MAX+1.0));
      if (power_modulo_fast(a, n-1, n) != 1)
      {
         return 0;
      }
   }

   return 1;
}

int main()
{
   int n, k;

   printf("Podaj liczbe do sprawdzenia.\n");
   scanf("%d", &n);

   printf("Podaj dokladnosc sprawdzenia.\n");
   scanf("%d", &k);

   if (Fermat(n, k) == 1)
   {
      printf("Liczba jest prawdopodobnie pierwsza.\n");
   }
   else
   {
      printf("Liczba jest zlozona.\n");
   }

   return 0;
}
Dodaj komentarz