求助 用快速幂求会报错
查看原帖
求助 用快速幂求会报错
757864
ruye楼主2023/12/22 18:06
#include <bits/stdc++.h> // By Lucky Ox
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define int long long
#define double long double
#define __int128 i128
#define endl '\n'
#define pii pair<int, int> 
#define INF 0x3f3f3f3f3f3f3f3f
#define npos string::npos
#define mod 1000000000000002493
int lcm(int x, int y){return x * y / __gcd(x, y);}
int qmi(int a, int k, int p){int res = 1;while(k){if(k & 1) res =  res * a % p;k >>= 1;a = a * a % p;}return res;}

const int N = 2e5 + 10;
int n, c;
int a[N];

void solve(){
    cin >> n >> c;
    for(int i = 1; i <= n; i ++ ) cin >> a[i];

    int l = 1, r = 1e9;
    while(l <= r) {
        int mid = (l + r) / 2, s = 0;

        bool is_1 = 1;
        for(int i = 1; i <= n; i ++ ) {
            s += (a[i] + 2 * mid) * (a[i] + 2 * mid);
            cout << (a[i] + 2 * mid) * (a[i] + 2 * mid) << ' ' << qmi(a[i] + 2 * mid, 2, mod) << endl;
            if(s > c) {
                r = mid - 1;
                is_1 = 0;
                break;
            }
        }
        if(!is_1) continue;
        if(s == c){
            cout << "ans = " << mid << endl;
            return ;
        } 
        else l = mid + 1;
    }
}

signed main(){
    IOS;
    int T = 1;
    cin >> T;
    while(T -- ){
        solve();
    }
	return 0;
}

代码如上 我用(a[i] + 2 * mid) * (a[i] + 2 * mid)ac 但是用qmi(a[i] + 2 * mid, 2, mod) 会出错 求大佬解答

2023/12/22 18:06
加载中...