NC216217. 我是科学家
描述
输入描述
输入包括两个整数N,M(1<=N<=M<=1e18)其中(M-N<=1e5)
输出描述
输出包括一个整数,输出记录所有DNA的组成的方案数。答案对1e9+7取模。
示例1
输入:
2 4
输出:
336
说明:
4^2 + 4^3 + 4^4 = 336C(clang11) 解法, 执行用时: 6ms, 内存消耗: 360K, 提交时间: 2021-01-29 18:49:27
#include<stdio.h> int main() { long long m,n,i,j,k=0,l,q,x,r=1; scanf("%lld%lld",&m,&n); for(q=m;m<=n;m++){ q=m; x=4;r=1; while(q!=0){ x=x%1000000007; if(q%2!=0){ r=r*x%1000000007; q/=2; x*=x; } else{ q/=2;x*=x;} } k=(k+r)%1000000007; } printf("%lld",k); }
pypy3 解法, 执行用时: 83ms, 内存消耗: 22272K, 提交时间: 2023-04-29 14:16:14
def quick_pow(x,n,m): res=1 while(n>0): if n&1: res=(res*x)%m x=(x*x)%m n>>=1 return res res=0 n,m=map(int,input().split()) for j in range(n,m+1): cnt=quick_pow(4,j,10**9+7) # print(cnt) res=(res+cnt)%(10**9+7) print(res%(10**9+7))
C++(clang++ 11.0.1) 解法, 执行用时: 2ms, 内存消耗: 384K, 提交时间: 2023-04-29 14:54:58
#include<iostream> using namespace std; #define int long long int N=1000000007; signed main() { int n,m,sum=0,p=4,s=1; cin>>n>>m; int t=n; while(t) { if(t&1) s=s*p%N; p=p*p%N; t>>=1; } for(int i=n;i<=m;i++) { sum=(sum+s)%N; s=s*4%N; } cout<<sum<<"\n"; return 0; }
Python3(3.9) 解法, 执行用时: 39ms, 内存消耗: 2784K, 提交时间: 2021-03-09 15:08:52
n,m=map(int,input().split()) c=0 for i in range(n,m+1): c+=pow(4,i,1000000009) print(c)