Pagini recente » Cod sursa (job #1516663) | Cod sursa (job #548358) | Cod sursa (job #1394315) | Cod sursa (job #104210) | Cod sursa (job #3175653)
#include <fstream>
using namespace std;
ifstream in("rsir.in");
ofstream out("rsir.out");
int a, b, x, y, z, t0, t1, MOD, n;
int pre1[7005], pre2[7005];
int intarziere, perioada;
pair<int, int> urm(pair<int, int> p)
{
pair<int, int> ans;
ans.first = p.second;
//ans.second = (pre1[p.first] + pre2[p.second]) % MOD;
ans.second = pre1[p.first] + pre2[p.second] - (pre1[p.first] + pre2[p.second] >= MOD ? MOD : 0);
return ans;
}
int main()
{
in>>t0>>t1;
in>>a>>b;
in>>x>>y>>z;
in>>MOD>>n;
for(int i = 0; i<MOD; i++)
{
pre1[i] = (((a * i) % MOD * i) % MOD + (x * i) % MOD) % MOD;
pre2[i] = (((b * i) % MOD * i) % MOD + (y * i) % MOD + z) % MOD;
}
pair<int, int> p1, p2;
p1 = p2 = {t0, t1};
do
{
p1 = urm(p1);
p2 = urm(p2);
p2 = urm(p2);
}
while(p1 != p2);
p1 = {t0, t1};
while(p1 != p2)
{
intarziere++;
p1 = urm(p1);
p2 = urm(p2);
}
p2 = urm(p2);
perioada++;
while(p1 != p2)
{
p2 = urm(p2);
perioada++;
}
if(n > intarziere)
{
n = intarziere + (n - intarziere) % perioada;
}
p1 = {t0, t1};
for(int i = 1; i<=n; i++)
{
p1 = urm(p1);
}
out<<p1.first;
return 0;
}