Advertisement
imarosi

Automorf számok

Apr 29th, 2018
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <iostream>     // std::cout
  2. #include <cmath>        // std::pow
  3. #include <stdlib.h>     // atoi
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, const char **argv)
  8. {
  9.     if (argc != 2) {
  10.         cout << "Használat: automorf <n>\n";
  11.         exit(1);
  12.     }
  13.  
  14.     int n = atoi(argv[1]);
  15.  
  16.     // automorf számoknak nev. azokat a számokat mely négyzetének utolsó számjegyeiből alkotott szám
  17.     // pont az eredeti számot adja. ilyen pld. 5^2=25 és utolsó számjegye az 5. vagy akár a 76 mert 76^2=5776.
  18.     // találd meg az összes n jegyű automorf számot.
  19.  
  20.     // maximális 32 bites előjeles szám a 2,147,483,647, ami 10 jegyű.
  21.     // Viszont az összes 10 jegyű már nem fér el int-ben, tehát csak 9 jegyig tudunk dolgozni:
  22.     if (n > 9) {
  23.         cout << "Ilyen nagy számokat már nem tudok kezelni int-ben\n";
  24.         exit(1);
  25.     }
  26.  
  27.     int elszam = 0;             // ha n == 1, ezek az egyjegyű számok
  28.     int utszam = 9;
  29.     if (n > 1) {
  30.         elszam = pow(10, n-1);  // 10 az n-ediken már n+1 jegyű
  31.         utszam = 10*elszam - 1;
  32.     }
  33.     int njegy = utszam+1;       // egy szám moduló njegy megadja az utolsó n jegyet
  34.     // pl. n=3 esetén:
  35.     // elszam = 100
  36.     // utszam = 999
  37.     // njegy = 1000
  38.  
  39.     cout << "Keressük az automorf számokat " << elszam << " és " << utszam << " között:\n";
  40.  
  41.     // long long-ot használunk a négyzetre: az int 32 bites, a long long 64 bites
  42.     // Így a négyzet belefér a knegyz változóba:
  43.     for (long long k=elszam; k <= utszam; k++) {    // végigmegyünk az összes n jegyű számon egyesével
  44.         long long knegyz = k * k;                   // vesszük a négyzetét
  45.         long long utson = knegyz % njegy;           // és annak az utolsó n jegyét (modulóval)
  46.         if (utson == k)
  47.             cout << k << " négyzete " << knegyz << endl;
  48.     }
  49.  
  50.     return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement