#include<bits/stdc++.h> using namespace std; long long gcd(long long x,int y) { while(y!=0) { int temp = x % y; x = y; y = temp; } return x; } int q[100000 + 10]; int main() { int T; cin >> T; for(int u = 1; u <= T ; u ++) { long long l , r; memset(q,0,sizeof(q)); int k; cin >> l >> r >> k; long long sum = 1; for(int i = 1; i <= k ; i ++) { if(q[i]) continue; int t = gcd(i,k); if(t != 1) { for(int j = i ; j <= k ; j += i ) { q[j] = 1; } } } //cout << 1 << endl; for(int i = 1; i <= k ; i ++) { if(!q[i]) sum *= i; sum %= k; } //cout << 2 << endl; long long temp = (r - l + 1) / k ,t; t = temp; long long ans = 1 ; while(temp) { if(temp & 1) ans = ans * sum % k; sum = sum * sum % k; temp >>= 1; } temp = t; //cout << 3 << endl; /*while(temp > 100) { sum *= sum; sum %= k; temp >>= 1; }*/ //cout << temp << endl; /*for(int i = 1; i <= temp ; i ++) { ans *= sum ; ans %= k; }*/ //cout << ans << endl; l = temp * k + l; //cout << l << endl; //cout << r - l << endl; //cout << ans << " " << l << endl; //cout << l << endl; for(long long i = l ; i <= r; i ++) { //cout << gcd(i,k) << endl; if(gcd(i , k) == 1) { long long tt = i % k; ans *= tt; } ans %= k; //if(!q[i]) // ans *= i; //cout << ans << endl; //ans %= k; } //cout << 4 << endl; cout << "Case #" << u << ": " << ans % k << endl; } return 0; }
这道题比较水,注意不要炸int就ok