牛客练习赛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 通过的,感谢大佬赐教~
全部评论
打表时,无法通过,示例都过不了 ,取消了打表方式的 Python 代码: mod = 998244353    # 取余数      def apow(fac, n):     res = 1     while n:         if n & 1:             res = (res * fac) % mod         n >>= 1         fac = (fac * fac) % mod     return res % mod # 打表 # table = [0, 1] # for i in range(2, int(1e7-3)): #     table.append((table[-1] * i) % mod)      T = int(input()) for _ in range(T):     n = int(input())     sum_li = (n*(1+n)//2) % mod     sum_li = (sum_li * sum_li) % mod     fac = 1     for i in range(2, n+1):         fac *= i         fac %= mod     mul_li = apow(fac, 2 * n)     # mul_li = apow(table[n], 2 * n)     print(sum_li, mul_li) 补充一下:之前一个地方少乘了一个n 研究了一下,是打表的问题: 1. 不打表的话通过30.0% (运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。) 2. 打表的话通过10.0%(运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。) 看来牛客对python不友好啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
点赞
送花
回复 分享
发布于 2019-09-17 17:45

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务