zufe 问题 : Bazinga

#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

猜你喜欢

转载自blog.csdn.net/ant_e_zz/article/details/80505541