NC53631. 求和
描述
输入描述
第一行一个整数T,表示数据组数。
接下来T行每行一个整数n,含义如题目描述所示。
输出描述
输出T行,表示每次询问的结果。
示例1
输入:
2 2 4
输出:
8 48
说明:
n=2时,。C(clang 3.9) 解法, 执行用时: 411ms, 内存消耗: 3212K, 提交时间: 2019-12-09 22:12:42
#include<stdio.h> inline int FP(int x,long long k) { int t=1; for(; k; k>>=1,x=1ll*x*x%998244353) if(k&1) t=1ll*t*x%998244353; return t; } main() { int m,t; scanf("%d",&t); long long i,n,sum; for(m=0;m<t;m++) { scanf("%lld",&n); if(n==0)printf("1\n"); else { sum=(n%998244353*FP(2,n-1)+FP(2,n))%998244353; printf("%lld\n",sum); } } }
C++11(clang++ 3.9) 解法, 执行用时: 244ms, 内存消耗: 8068K, 提交时间: 2019-11-15 22:44:42
#include<bits/stdc++.h> #define p 998244353 using namespace std; typedef long long ll; ll qsm(ll x,ll y){ ll ret=1ll; while (y){ if (y&1) ret=ret*x%p; x=x*x%p,y>>=1; } return ret; } ll T,n,ans,s,k; int main(){ s=qsm(2,p-2); scanf("%d",&T); while (T--){ scanf("%lld",&n); k=(n+2)%p; ans=k*s%p; ans=ans*qsm(2,n)%p; printf("%lld\n",ans); } }
C++14(g++5.4) 解法, 执行用时: 304ms, 内存消耗: 3300K, 提交时间: 2019-11-15 20:14:04
#include<bits/stdc++.h> using namespace std; #define ll long long const ll mod = 998244353; ll ksm(ll a,ll b,ll c) { ll ans=1; while(b) { if(b%2) ans=ans*a%c; b/=2; a=a*a%c; } return ans; } int main() { ll t,n; cin>>t; while(t--) { scanf("%lld",&n); printf("%lld\n",((n%mod*ksm(2,n-1,mod)%mod)+(ksm(2,n,mod)%mod))%mod); } }
pypy3(pypy3.6.1) 解法, 执行用时: 2150ms, 内存消耗: 30680K, 提交时间: 2019-11-15 20:28:50
def ksm(b, e, m): result = 1 e %= (m-1) while e != 0: if (e&1) == 1: result = (result * b) % m e >>= 1 b = (b*b) % m return result n = int (input()) while n > 0 : n-=1 m = int (input()) ans = (ksm(2, m, 998244353) + ksm(2, m-1, 998244353) * m) % 998244353 print(ans)
Python3(3.5.2) 解法, 执行用时: 3560ms, 内存消耗: 6260K, 提交时间: 2019-11-16 16:28:33
T = int(input()) while T: T -= 1 n = int(input()) if n == 0: print(1) continue print((n+2)*pow(2, n-1, 998244353)%998244353)