Input i modulo bardzo dużych liczb

0

Zadanko w systemie podobnym do SPOJ.
Obliczyć resztę z dzielenia pierwszej liczby przez drugą.

Mój kod:

We = input().split(" ")
print (int(We[0]) % int(We[1]))

Testy dla małych liczb przechodzą. Testy dla dużych liczb przekraczają czas wykonania.
Jak to można przyspieszyć? Stawiam, że split i konwersja na int zżerają dużo czasu (przy liczbie rzędu 10^1000000).

1

a testowałeś, np. tak

reszta = divmod(10245888777, 666)
0

@WWA2025: tak samo, dla testów "wymagających" przekroczenie czasu.

We = input().split(" ")
print (divmod(int(We[0]), int(We[1]))[1])
1

A może tak po bożemu bez tego split'a

import math

str1 = int(input(f'Podaj cyfre/liczbe: '))
str2 = int(input(f'Podaj cyfre/liczbe: '))
r = math.fmod(str1 , str2)
print("Reszta : {}".format( r ) )
1

A gdyby użyć szukania binarnego do ustalenia ile razy b mieści się w a, a potem już tylko odjąć?

1
WWA2025 napisał(a):

A może tak po bożemu bez tego split'a

Bardzo bym tak chciał, ale dane wejściowe są oddzielone spacją, a nie enterem :(
input() nie działa tak jak cin >> x; w C++ :/
Skrypt musi być przygotowany tak, żeby działać w sprawdzarce na serwerze.


Modulo wykonywane tym algorytmem załatwiło sprawę: https://www.geeksforgeeks.org/how-to-compute-mod-of-a-big-number/
screenshot-20220115211654.png

Dzięki temu, nie konwertuję stringa na inta. Więc nawet jeśli w Pythonie modulo dużych intów jest tak samo optymalnie zaimplementowane, to zyskuję cenny czas, bo Python nie musi walidować długiego stringa z liczbą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1