每个括号里出一个X其他括号里出一个常数,设Sn=a1 * a2 * ... * an, ai 为第i个括号内的常数(x + ai), 则 ans = Sn / a1 + Sn / a2 + .. Sn / an, 主义题目要求对10007取模,取模的结果不能为负数,所以(res + MOD)%MOD,因为涉及到了除法的取模,所以不能直接Sn/ai, 而是要 Sn * (a 的逆元),采用费马小定理求逆元, 费马小定理:a^(p-2) mod p 是 a 在 mod p 下的逆元,p为质数

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const ll MOD = 10007;
string s;
ll ji = 1;
ll fun(ll a) {
    ll res = 1, b = MOD - 2;
    while (b) {
        if (b & 1) res = (res * a) % MOD;
        b >>= 1;
        a = (a * a) % MOD;
    }
    return res;
}
int main() {
    cin >> s;
    vector<ll> v;
    for (int i = 0; i < s.size(); i += 5) {
        ll t = s[i + 3] - '0';
        if (s[i + 2] == '-') t = -t;
        ji = (ji * t) % MOD;
        v.push_back(t);
    }
    long long res = 0;
    for (auto t : v) {
        res = (res + ji * fun(t) + MOD) % MOD;
    }
    cout << (res + MOD) % MOD;
    return 0;
}