Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdbool.h>
- #include <limits.h>
- bool overCisloUctu(long long cislo, int minPocetSudych, int minPocetVyskytu) {
- int vahy[] = { 1, 2, 4, 8, 5, 10, 9, 7, 3, 6 };
- int cetnosti[] = { 0,0,0,0,0,0,0,0,0,0 };
- int maxPocetVyskytu = 0;
- int pozice = 0;
- int sum = 0;
- int pocetSudych = 0;
- while (cislo > 0) {
- int cislice = cislo % 10; // modulo, tj. zbytek po deleni
- cetnosti[cislice]++;
- if (cetnosti[cislice] > maxPocetVyskytu)
- maxPocetVyskytu = cetnosti[cislice];
- if ((cislice % 2) == 0) pocetSudych++;
- sum = sum + cislice * vahy[pozice];
- cislo = cislo / 10;
- pozice++;
- }
- // pocet uvodnich nul bude = 10-pozice
- pocetSudych = pocetSudych + 10 - pozice;
- return ((sum % 11) == 0) && pocetSudych >= minPocetSudych && maxPocetVyskytu >= minPocetVyskytu;
- }
- int main(int argc, char * argv[]) {
- printf("Generator cisel uctu...\n");
- double progres = 0;
- int pocitadlo = 0;
- long long x = 0, konec=9999999999;
- if (argc > 1) {
- if (argv[1][0] == '1') {
- x = 5000000000;
- fprintf(stderr, "Hledam v rozsahu 5G-10G\n");
- }
- else {
- konec = 5000000000;
- fprintf(stderr, "Hledam v rozsahu 0-5G\n");
- }
- } else fprintf(stderr, "Hledam v rozsahu 0-10G\n");
- for (; x <= konec; x++) {
- if (pocitadlo == 10000000) {
- pocitadlo = 0;
- fprintf(stderr, "progres=%.1lf procent\n", progres);
- progres = progres + 0.1;
- }
- pocitadlo++;
- if (overCisloUctu(x, 0, 8))
- printf("%010lld\n", x);
- }
- }
RAW Paste Data