1. 程式人生 > >洛谷 #2312. 解方程

洛谷 #2312. 解方程

題意

求 \(\ 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; }