列表

详情


NC54290. 夜雨江湖无故旧

描述

        求,答案对20190930取模,保证gcd(c,20190930)=1。

        分数取模的定义:,其中

输入描述

第一行一个正整数T表示测试数据的组数.
以下T行,每行4个正整数a,b,c,d.

输出描述

每组数据在一行内输出答案。

示例1

输入:

1
233 2333 23333 233333

输出:

2322931

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 480K, 提交时间: 2019-10-31 14:50:40

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#define oo 0x3ffff
#define Mod 20190930
#define ll long long
using namespace std;

int T;

ll exgcd(ll a,ll b,ll &x1,ll &y1)
{
	if(b == 0) {x1 = 1,y1 = 0;return a;}
	ll d = exgcd(b,a % b,x1,y1);
	ll z = x1;x1 = y1;y1 = z - y1 * (a / b);
	return d;
}

ll ksm(ll a,ll b)
{
	ll ans = 1;
	a = a % Mod;
	while(b){
		if(b & 1) ans = ans * a % Mod;
		b = b / 2;
		a = (a * a) % Mod;
	}
	return ans;
}

int main()
{
	ll a,b,c,d,x1,y1;
	scanf("%d",&T);
	while(T--){
		scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
		ll x = ksm(a,b);
		ll y = ksm(c,d);
		ll tmp = exgcd(y,Mod,x1,y1);
		ll y2 = ( (x1 % Mod + Mod) % Mod ) / tmp;
		ll Ans = x * y2 % Mod;
		printf("%lld\n",Ans);
	}
	return 0;
}

Python3 解法, 执行用时: 41ms, 内存消耗: 5140K, 提交时间: 2022-08-15 23:47:23

P=20190930
def power(a,b):
    ans=1%P
    while b>=1:
        if b%2==1:
            ans=ans*a%P
        a=a*a%P
        b=b//2
    return ans

def exgcd(a, b):     
    if b == 0:         
        return 1, 0, a     
    else:         
        x, y, q = exgcd(b, a % b)        
        x, y = y, (x - (a // b) * y)         
        return x, y, q

t=int(input())
while t>0 :
    a,b,c,d = map(int,input().split())
    x,y,q=exgcd(c,P)
    c=(x%P+P)%P
    print(power(a,b)*power(c,d)%P)
    t=t-1

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 424K, 提交时间: 2023-06-27 20:09:47

#include<bits/stdc++.h>
using namespace std;
const int P = 20190930;
int64_t powMod(int64_t a, int64_t b, int64_t p) {
  a %= p;
  int64_t s = 1;
  while (b) {
    if (b % 2) s = s * a % p;
    b /= 2, a = a * a % p;
  }
  return s;
}
int64_t inv(int64_t a, int64_t b){
 return 1<a ? b - inv(b%a,a)*b/a : 1;
}

int main(){
  int T; cin >> T;
  while (T--) {
    int a, b, c, d; cin >> a >> b >> c >> d;
    cout << powMod(a, b, P) * powMod(inv(c, P), d, P) % P << endl;
  }
}

上一题