### My issue

can anyone tell where am i wrong or for which test case.

### My code

```
#include <iostream>
int main() {
int t;
std::cin>>t;
while(t--)
{
int N, K;
std::cin >> N >> K;
int max_X = -1, max_value = -1;
for (int X = 0; X <= N; ++X) {
int value = (X % K) * ((N - X) % K);
if (value > max_value) {
max_value = value;
max_X = X;
}
}
std::cout << "The value of X for maximum F(X) is: " << max_X << std::endl;
}
return 0;
}
```

Problem Link: MAXIMALEXP Problem - CodeChef

@shubham_731

due to high constraints u can’t loop through to find the maximum value.

just observe some smaller test cases .

U will get the pattern

refer the following solution for better understanding .

```
#include <iostream>
using namespace std;
int main()
{
int t;
cin >> t;
while(t--)
{
int n, k;
cin >> n >> k;
if (k == 1)
{
cout << "0\n";
continue;
}
if (k > (n + 1) / 2)
{
cout << (n + 1) / 2 << '\n';
continue;
}
if (n % k == 0 || n % k == k - 1)
{
cout << k / 2 << '\n';
continue;
}
int l = n % k + 1, r = k - 1;
cout << l + (r - l) / 2 << '\n';
}
}
```

how someone can observe that if(k>(n+1)/2) we have to print (n+1)/2 similarly the third if statement is there any approach that you can explain.

Also explain me that for which test case

the above code is satisfied.

@shubham_731

The thing is when u are taking mod with K the maximum u can get is k-1.

So the ideal case would be getting (K-1)*(K-1).

Now when k>n

U will get the maximum value at (N%k)/2; (which is the middle value of n).

and if n>=k

then u have to get the new middle value for which u will get the maximum answer.

and for this case if n%k is !=k-1.

then U can add (k+1)/2 to the (N%k)/2 to get to the new middle value for which u will get the maximum answer.

Its not quite intuitive .

U have to take several smaller test cases considering both cases when k>n and when n>=k .

only then U can make these observations.

i’ll suggest to try for several smaller test cases in rough to figure out what’s happening and how u are getting maximum answer in middle values.