-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHard exam.cpp
63 lines (52 loc) · 1.18 KB
/
Hard exam.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
int vis[50000001];
int main() {
//ios_base::sync_with_stdio(false);
// cin.tie(NULL);
ll n,t,a,b,m,ans=0,q,i,j;
long long k=0;
scanf("%lld%lld%lld%lld%lld%lld",&n,&t,&q,&a,&b,&m);
if(n<=7000)
{
for(i=0;i<=n;i++)
{
for(j=0;j<=n;j++)
{
vis[n*(i+j)-2*i*j]=1;
}
}
while(t--)
{
q=(q*a+b)%m;
k=q%(n*n+1);
if(vis[k])
ans++;
}
printf("%d",ans);
}
else
{
while(t--)
{
q=(q*a+b)%m;
k=q%(n*n+1);
k=n*n-2*k;
if(n%2!=0||k!=0)
{
for(i=0;i<=n;i++)
{
if(2*i!=n && k%(2*i-n)==0&&k/(2*i-n)<=n&&k/(2*i-n)>=-n &&(k/(2*i-n)%2+2)%2==n%2 )
{
ans++;
break;
}
}
}
else
ans++;
}
printf("%d",ans);
}
}