IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
honza.b4
Člen
Avatar
honza.b4:27.1.2014 14:17

Zdravim. prohlednete si tento zdrojak:

#include <stdio.h>
#include <stdlib.h>
long long int a, b, x, y, k=0, i=1;
int main(){
scanf("%lld %lld %lld %lld", &a, &b, &x, &y);
FILE *s;
s = fopen("reseni.txt", "w+");
printf("\npostup: \n\n");
long long int z = a/100;
long long int p = z*i;
do{
    if((a%x)==0 && (a%y)==0){
        printf("Nalezeny pocet reseni: %lld\n", k);
        k++;
    }
    if(a == p){
        printf("jsem v %lld procentech", i);
        i++;
    }

    a++;
}while(a != b+1);

printf("\n%lld\n\n", k);
fprintf(s, "%lld", k);
return 0;
}

na vstupu mam ziskat rozmezi cisel a-b a potom delitele x a y;
kdyz je nejake cislo z rozmezi a-b delitelne obema deliteli x a y, tk je

k++;

jenze, kdyz je na vstupu rozmezi cisel a-b 858 miliard, tak to muj comp do konce zivota nestihne. Nevite, jak to podstatne urychlit?

diky za pomoc vsem!:D

 
Odpovědět
27.1.2014 14:17
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 14:31

zakomentuj riadky:
printf("Nalezeny pocet reseni: %lld\n", k);
a
printf("jsem v %lld procentech", i);

Nahoru Odpovědět
27.1.2014 14:31
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):27.1.2014 14:36

Zadal som naozaj veľké číslo (trvanie 95 sek) a tu je výstup:

Editováno 27.1.2014 14:36
Nahoru Odpovědět
27.1.2014 14:36
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
honza.b4
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
honza.b4:27.1.2014 14:37

zajimavy. co mas za CPU? :D

Editováno 27.1.2014 14:38
 
Nahoru Odpovědět
27.1.2014 14:37
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 14:42

Intel(R)Core(TM)2 Duo CPU
[email protected]
2.83GHz 0,98GB RAM

Nahoru Odpovědět
27.1.2014 14:42
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
honza.b4
Člen
Avatar
Odpovídá na honza.b4
honza.b4:27.1.2014 14:43

muj os: ubuntu 13.10 x64
muj cpu: core i3 330m 2,13 GHz dvoujadro

vstup: 146305278845 868444855111 97899 408438

cas vypoctu: ?. jeste to neskoncilo

 
Nahoru Odpovědět
27.1.2014 14:43
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 14:44

Ja to ale nevypisujem, ak si si nevšimol.

Nahoru Odpovědět
27.1.2014 14:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 14:50

Tvoje zadanie trvalo 66 sek.

BTW
Možno by bolo zaujímavejšie správne čísla ulokladať do toho súboru a potom ich z neho vypísať.

Editováno 27.1.2014 14:51
Nahoru Odpovědět
27.1.2014 14:50
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
honza.b4
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
honza.b4:27.1.2014 14:51

aha. tkze to nebude zdrojakem, ale nejakym vnejsim vlivem.

 
Nahoru Odpovědět
27.1.2014 14:51
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 14:52

Zakomentoval si tie dva riadky, čo som ti písal?

Nahoru Odpovědět
27.1.2014 14:52
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
honza.b4
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
honza.b4:27.1.2014 14:54

zakomentoval. program znovu zkompiloval a furt nic...

 
Nahoru Odpovědět
27.1.2014 14:54
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 14:55

Skús toto:

#include <stdio.h>
#include <stdlib.h>
long long int a, b, x, y, k=0, i=1;
int main(){
    scanf("%lld %lld %lld %lld", &a, &b, &x, &y);
    FILE *s;
    s = fopen("reseni.txt", "w+");
    printf("\npostup: \n\n");
    long long int z = a/100;
    long long int p = z*i;
    do{
        if((a%x)==0 && (a%y)==0){
            k++;
        }
        if(a == p){
            i++;
        }

        a++;
    }while(a != b+1);

    printf("\n%lld\n\n", k);
    fprintf(s, "%lld", k);
    fclose(s);

    return 0;
 }
Nahoru Odpovědět
27.1.2014 14:55
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 14:58

Aj keď tie premenné

long long int a, b, x, y, k=0, i=1;

sú zbytočne globálne.

Nahoru Odpovědět
27.1.2014 14:58
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
honza.b4
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
honza.b4:27.1.2014 15:00

uz to bezi 4 minuty a furt nic

 
Nahoru Odpovědět
27.1.2014 15:00
Avatar
Odpovídá na honza.b4
Libor Šimo (libcosenior):27.1.2014 15:22

Doteraz som to testval na win xp, doma testnem na ubuntu 12.04.

Nahoru Odpovědět
27.1.2014 15:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
honza.b4
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
honza.b4:27.1.2014 15:26

uz nemusis, ale diky za pomoc.

predelal sem komplet zdrojak na toto a uz to fachci:

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

gcd (long long int a, long long int b)
{
  if (!b) return a;
  return gcd(b, a % b);
}

int main (void){
  long long int a, b, x, y, k, lcm;
  FILE *s;
  scanf("%lld %lld %lld %lld", &a, &b, &x, &y);
  s = fopen("reseni.txt", "w+");
  lcm = x * y / gcd(x, y);
  k = b/lcm - a/lcm;
  printf("\n%lld\n\n", k);
  fprintf(s, "%lld", k);
  return 0;
}
Editováno 27.1.2014 15:26
 
Nahoru Odpovědět
27.1.2014 15:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.