牛客练习赛52题A数数Python一直无法通过,求赐教~
牛客练习赛52 题A 数数 Python 一直无法通过,求赐教~
为啥同样的思路,python过不了?
这是C++版(借鉴 hnust_liushisi)
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
typedef long long ll;
const ll mod=998244353;
const ll N=1e7+10;
ll sz[N];
ll qpow(ll a, ll n)//计算a^n % mod
{
ll re = 1;
while(n)
{
if(n & 1)//判断n的最后一位是否为1
re = (re * a) % mod;
n >>= 1;//舍去n的最后一位
a = (a * a) % mod;//将a平方
}
return re % mod;
}
int main()
{
sz[1]=1;
for(ll i=2;i<N-7;i++)
sz[i]=(sz[i-1]*i)%mod;
ll t,n;
ll ls,ls1;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
ls=(n+((n-1)*n)/2);
ls=ls%mod;
ls=ls*ls;
ls=ls%mod;
ls1=qpow(sz[n],2*n);
printf("%lld %lld\n",ls,ls1);
}
return 0;
} 这是我更改后的 python 版:
mod = 998244353 # 取余数 # 打表 table = [0, 1] for i in range(2, int(1e7+3)): table.append((table[-1] * i) % mod) def apow(a, n): res = 1 while n: if n & 1: res = (res * a) % mod n >>= 1 a = (a * a) % mod return res % mod T = int(input()) for _ in range(T): n = int(input()) sum_li = (n+((n-1)//2)) % mod sum_li = (sum_li * sum_li) % mod mul_li = apow(table[n], 2 * n) print(sum_li, end=' ') print(mul_li)
通过率 0.00%,报超出时间(检查循环或时间复杂度),是因为打表了吗?
至今为止,还未见 python 通过的,感谢大佬赐教~
查看24道真题和解析