列表

详情


NC216217. 我是科学家

描述

DNA是所有真核生物的遗传物质,它由四种碱基组成。现在科学家要设计单链DNA,要穷举给定规定长度的DNA的所有组成方法。现在给你计算长度在N到M的单链DNA的组成方法数(DNA每个单位长度都有四种组成可能)。

输入描述

输入包括两个整数N,M(1<=N<=M<=1e18)其中(M-N<=1e5)

输出描述

输出包括一个整数,输出记录所有DNA的组成的方案数。答案对1e9+7取模。

示例1

输入:

2 4

输出:

336

说明:

4^2 + 4^3 + 4^4 = 336

原站题解

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

C(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)

上一题