home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 3 / CD_Magazyn_EXEC_nr_3.iso / Recent / docs / mags / saku33d2.lha / Ohjelmat / Alkuluvut.c next >
C/C++ Source or Header  |  2000-07-16  |  1KB  |  53 lines

  1.  
  2. /* Tämä näppärä ohejlma tuli tehtyä kun luulintarvitsevani
  3. alkulukuja murtolukujen sievennykseen, mutta Euklideen
  4. algoritmillä löytyy syt eli suurin yhteinen tekijä näppärämmin,
  5. ilman että tarvitsee jakaa lukuja kaikkiin tekijöihin...*/
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <math.h>
  10. int i,i2,j=2,
  11.     lkm=200,    //1217
  12.     luku=3;
  13. int    *alkuluvut;
  14. float neliojuuri;
  15. main(ac, av)
  16. int ac;
  17. char *av[];
  18. {
  19.      if (ac == 1) {
  20.         puts("Alkuluvut.exe <lkm> esim. Alkuluvut.exe 50");
  21.         exit(1);
  22.     }
  23.  
  24.     lkm=atoi(av[1]);
  25.  
  26.     unsigned koko = sizeof(int);
  27.     alkuluvut=(int *) calloc(lkm+1,koko);
  28.     if (alkuluvut== NULL) {
  29.         puts("Taulukon varaaminen ei onnistunut");
  30.         exit(1);
  31.     }
  32.     alkuluvut[0]=1;
  33.     alkuluvut[1]=2;
  34.     do
  35.     {
  36.         neliojuuri=fsqrt(luku);  /* luvun suurin tekijä<luvun neliöjuuri */
  37.         i2=1;
  38.         do
  39.         {
  40.             if ((luku%alkuluvut[i2])==0) break;
  41.             if ((alkuluvut[i2]>neliojuuri) || (i2>=j))
  42.             {
  43.                 alkuluvut[j++]=luku;
  44.                 printf("   %d. alkuluku = %d\n",j,luku);
  45.                 break;
  46.             }
  47.             i2++;
  48.         } while (1);
  49.         luku=luku+2;
  50.     } while (j<lkm);
  51.     free(alkuluvut);
  52. }
  53.