Mam takie zadanie Teokracja
No i nie wiem co oznaczają te kropki nad b
i d
(a ̇b)/(c ̇d) ?
EDIT:Szczególnie zastanawia mnie dlaczego dla danych 2 1 3 7 wychodzi tak duży wynik
Mam takie zadanie Teokracja
No i nie wiem co oznaczają te kropki nad b
i d
(a ̇b)/(c ̇d) ?
EDIT:Szczególnie zastanawia mnie dlaczego dla danych 2 1 3 7 wychodzi tak duży wynik
Chyba o to chodzi: https://www.quora.com/What-does-a-dot-over-a-number-represent
Czyli jest to rekurencyjne zapisanie liczb w nieskończoność (?).
Jak masz 12 i jest kropka nad 2 to oznacza to mniejwiecej to: 1222222222222222222... u ciebie możliwe że będzie to limit 10^18.
Poza tym w c++ (jeżeli go używasz) zadanie wydaje się być w miarę proste, bo od c++11 masz unsigned long long int, którego wartość maksymalna to 10^19 i nie musisz pisać własnej klasy do dużych liczb.
@Czitels:
Coś tu jest chyba nie tak bo gdy wstawisz coś takiego do Pythona
((int('2' + '1' * 17))/(int('7' + '3' * 17))) % (1e9 + 696969)
to wynik równa się:
0.2878787878787879
EDIT:
Magia arytmetyki modularnej
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long int ull;
ull fastExponentation(ull a, ull b);
const ull MODULO = 1000696969;
int main()
{
ull a, b, c, d;
cin >> a >> b >> c >> d;
cout << ((((a % MODULO) * (b % MODULO)) % MODULO) * fastExponentation(((c % MODULO) * (d % MODULO)) % MODULO, MODULO-2)) % MODULO;
cin.ignore();
cin.get();
}
ull fastExponentation(ull a, ull b)
{
ull result = 1;
while (b > 0)
{
if (b & 1)
result = (result * a) % MODULO;
a = (a * a) % MODULO;
b >>= 1;
}
return result;
}
przechodzi na 100 pkt