Guest User

Cwiczenie 7

a guest
Dec 4th, 2011
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. /* Cwiczenie 7 */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>  /* Funkcja system()         */
  5. #include <assert.h>  /* Makroinstrukcja assert() */
  6. #include <math.h>    /* Funkcja log()            */
  7.  
  8. typedef unsigned int uint;
  9. typedef char bool;
  10.  
  11. #define true 1
  12. #define false 0
  13. #define MAX_PIERWSZA 10000000    /* Rozmiar tablicy prawdy */
  14.  
  15. bool czyPierwsza(uint liczba) {
  16.     static bool pierwsze[MAX_PIERWSZA];  /* Talica prawdy     */
  17.     static bool init = false;            /* Zainicjalizowana? */
  18.    
  19.     assert(liczba < MAX_PIERWSZA);
  20.    
  21.     if (!init) {
  22.         uint i, j;   /* Liczniki petli */
  23.        
  24.         pierwsze[0] = false;
  25.         pierwsze[1] = false;
  26.        
  27.         for (i = 2; i < MAX_PIERWSZA; i++)
  28.             pierwsze[i] = true;
  29.        
  30.         for (i = 2; i < MAX_PIERWSZA; i++)
  31.             for (j = 2*i; j < MAX_PIERWSZA; j += i)
  32.                 pierwsze[j] = false;
  33.        
  34.         init = true;
  35.     }
  36.    
  37.     return pierwsze[liczba];
  38. }
  39.  
  40. uint pi(uint n) {
  41.     static uint ilosc = 0;   /* Licznik liczb pierwszych    */
  42.     static uint iloscDo = 0; /* Do jakiej liczby policzono? */
  43.     uint i;                  /* Licznik petli               */
  44.    
  45.     /* Dzieki zmiennym statycznym funkcja bedzie dzialac    */
  46.     /* duzo szybciej.                                       */
  47.    
  48.     if (n < iloscDo) {
  49.         ilosc = 0;
  50.         iloscDo = 0;
  51.     }
  52.    
  53.     for (i=iloscDo+1; i<=n; i++)
  54.         if ( czyPierwsza(i) )
  55.             ilosc++;
  56.    
  57.     iloscDo = n;
  58.    
  59.     return ilosc;
  60. }
  61.  
  62. uint f(uint n) {
  63.     return n / log(n);
  64. }
  65.  
  66. void print(uint n) {
  67.     uint pin = pi(n);
  68.     uint fn = f(n);
  69.     uint deltan = pin-fn;
  70.    
  71.     printf("pi(%u) = %u\tf(%u) = %u\t(pi-f)(%u) = %u\n",
  72.             n, pin, n, fn, n, deltan );
  73. }
  74.  
  75. int main(void) {
  76.     uint i;
  77.    
  78.     for (i = 10000; i<=1000000; i += 10000)
  79.         print(i);
  80.    
  81.     return 0;
  82. }
  83.  
  84.  
Advertisement
Add Comment
Please, Sign In to add comment