求一个数x,使得f(x) % (pri * pri) == 0。暴力,数学题。写完了去找了下题号= =
#include <cstdio>
#include <iostream>
using namespace std;
long long arr[6];
int main()
{
int t, cas = 0;
scanf("%d", &t);
while (t--)
{
int n;
scanf("%d", &n);
int tmp = n;
while (tmp >= 0)
scanf("%lld", &arr[tmp--]);
// for (int i = n; i >= 0; --i)
// printf("%d\n", arr[i]);
// getchar();
long long t, f_res = -1;
scanf("%lld", &t);
for (int i = 0; i < t; ++i)
{
long long res;
// printf("n = %d\n", n);
switch(n)
{
// case 0: res = arr[0]; break;
case 1: res = arr[1] * i + arr[0]; break;
case 2: res = arr[2] * i * i + arr[1] * i + arr[0]; break;
case 3: res = arr[3] * i * i * i + arr[2] * i * i + arr[1] * i + arr[0]; break;
case 4: res = arr[4] * i * i * i * i + arr[3] * i * i * i + arr[2] * i * i + arr[1] * i + arr[0]; break;
}
if (res % t == 0)
{
// printf("first i = %d\n", i);
for (int j = i; j < t * t; j += t)
{
long long res2;
switch(n)
{
//case 0: res = arr[0]; break;
case 1: res2 = arr[1] * j + arr[0]; break;
case 2: res2 = arr[2] * j * j + arr[1] * j + arr[0]; break;
case 3: res2 = arr[3] * j * j * j + arr[2] * j * j + arr[1] * j + arr[0]; break;
case 4: res2 = arr[4] * j * j * j * j + arr[3] * j * j * j + arr[2] * j * j + arr[1] * j + arr[0]; break;
}
//printf("res = %d\n", res);
if (res2 % (t * t) == 0)
{
// printf("%d\n", j);
f_res = j;
break;
}
}
}
if (f_res != -1)
break;
}
if (f_res != -1)
printf("Case #%d: %lld\n", ++cas, f_res);
else
printf("Case #%d: No solution!\n", ++cas);
}
}