CSP模拟52联测14 A.长春花
CSP模拟52联测14 A.长春花
题目大意
给定一个素数 \(p\),对每个 \(0 \le x < p\),设 \(f(x)\) 表示一个最小的非负整数 \(a\),使得存在一个非负整数 \(b\),满足 \((a^2+b^2) \bmod p = x\)。
现在,你想要求 \(\max\{ f(0), f(1), \cdots, f(p-1) \}\) 的值。
思路
暴力搞一下发现 \(a\) 很小,所以就预处理一下 \(b[i^2 \mod p] = 1 (i\in[0 , p])\)
然后就每个 \(a\) 枚举一下就好了
code
#include <bits/stdc++.h>
#define fu(x , y , z) for(long long x = y ; x <= z ; x ++)
using namespace std;
long long p , b[10000005];
int main () {
freopen ("A.in" , "r" , stdin);
freopen ("A.out" , "w" , stdout);
scanf ("%d" , &p);
fu (i , 1 , p) {
b[(i * i) % p] = 1;
}
long long ans = 0;
fu (i , 0 , p) {
fu (j , 0 , p) {
if (b[(1ll * (i + p) - 1ll * j * j % p) % p]) {
ans = max (ans , j);
break;
}
}
}
printf ("%d" , ans);
return 0;
}
如果人生会有很长,愿有你的荣耀永不散场