We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
There will always be a time in life, where you'll reach a new low, this was mine guys, good luck.
using int64 = long long;
const int64 MOD = 1LL << 31;
int64 gcd64(int64 a, int64 b) {
while (b) {
int64 t = a % b;
a = b;
b = t;
}
return a;
}
long long uniqueCount(long long S, long long P, long long Q, long long N) {
if ((Q & 1LL) && (P % 4 == 1)) {
return min(N, MOD);
}
if (P == 1) {
long long per = MOD / gcd64(Q, MOD);
return min(N, per);
}
if (Q == 0) {
long long g = 1;
long long x = S;
set<long long> seen;
while (seen.insert(x).second) {
x = (x * P) % MOD;
++g;
if (g > MOD) break;
}
return min(N, (long long)seen.size());
}
if (N < 1000000) {
set<long long> seen;
long long cur = S;
for (long long i = 0; i < N; i++) {
seen.insert(cur);
cur = (cur * P + Q) % MOD;
}
return seen.size();
}
return min(N, MOD);
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
unsigned int n, s, p, q;
cin>>n>>s>>p>>q;
Bit Array
You are viewing a single comment's thread. Return to all comments →
There will always be a time in life, where you'll reach a new low, this was mine guys, good luck. using int64 = long long; const int64 MOD = 1LL << 31;
int64 gcd64(int64 a, int64 b) { while (b) { int64 t = a % b; a = b; b = t; } return a; }
long long uniqueCount(long long S, long long P, long long Q, long long N) { if ((Q & 1LL) && (P % 4 == 1)) { return min(N, MOD); }
}
int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ unsigned int n, s, p, q; cin>>n>>s>>p>>q;
} `