洛谷 #2312. 解方程
阿新 • • 發佈:2018-11-26
題意
求 \(\ a_0+a_1x+a_2x2+\cdots+a_nxn=0\)在[1,m]區間的整數解
題解
用秦九昭公式,暴力即可
除錯記錄
為了防止爆long long,要模一個較大的質數
#include <cstdio>
#include <cctype>
#define int long long
#define maxn 105
#define mo 1000000007
using namespace std;
int n, m, a[maxn], ans[maxn];
void read(int &x){
int opt = 1; char ch = getchar();
while (!isdigit(ch)){ if (ch == '-') opt = -1; ch = getchar(); }
while (isdigit(ch)) x = (x * 10 + (ch & 15)) % mo, ch = getchar();
x *= opt;
}
signed main(){
read(n), read(m);
for (int i = 0; i <= n; i++){
read(a[i]);
}
for (int i = 1; i <= m; i++){
int sum = a[n];
for (int j = n - 1; j >= 0; j--)
((sum *= i) += a[j]) %= mo;
if (sum == 0) ans[++ans[0]] = i;
}
printf("%lld\n", ans[0]);
for (int i = 1; i <= ans[0]; i++) printf("%lld\n", ans[i]);
return 0;
}