2019 计蒜之道 初赛 第三场 阿里巴巴协助征战SARS(python做法,费马小定理+快速幂)

这篇博客探讨了如何利用费马小定理和快速幂算法来计算满足特定条件的SARS病毒DNA序列的数量。在DNA字符串仅由A、T、C、G组成,且A和C出现偶数次的情况下,文章提供了一个Python解决方案,计算这些字符串的个数对10^9 + 7取模的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前,SARS 病毒的研究在世界范围内进行,经科学家研究发现,该病毒及其变种的 DNA 的一条单链中,胞嘧啶、腺嘧啶均是成对出现的。这虽然是一个重大发现,但还不是该病毒的最主要特征,因为这个特征实在太弱了。

为了进一步搞清楚该病毒的特征,CN 疾病控制中心和阿里巴巴集团合作,用科技的力量和程序的思维来解决这个难题。现阿里巴巴特委派你成为 CN 疾病控制中心的 SARS 高级研究员,去研究在这个特征下,可能成为 SARS 病毒的 DNA 序列的个数。更精确地说,你需要统计所有满足下列条件的长度为 nn 的字符串的个数:

  1. 字符串仅由 A、T、C、G 组成
  2. A 出现偶数次(也可以不出现)
  3. C 出现偶数次(也可以不出现)

当 n=2n=2 时,所有满足条件的字符串有如下 66个:

TT,TG,GT,GG,AA,CC。

注: 由于这个数可能非常庞大,你只需给出对 10^9 + 7109+7 取模的结果即可。

输入格式

输入文件给出了若干个 nn。最后以数字 00 结束。

输出格式

对于输入文件中的每一个 nn,输出满足条件的字符串的个数对 10^9 + 7109+7 取模的结果。

数据范围

n \le 10^{(10^5)}n≤10(105)

样例输入复制

1
2
3
100
0

样例输出复制

2
6
20
113046907

题目思路:先搜索枚举出前几项找规律,最后发现规律是2^n-1+4^n-1,然后用费马小定理求出幂的余数,再用快速幂求解即可,python做法如下

global mod
mod = 1000000007
def mi(n,b):  #快速幂
    x=n
    ans=1
    while b:
        if b%2==1:
            ans*=x%mod
        x=(x%mod*x%mod)%mod
        b=b>>1
    return ans
while(1):
    a=input()
    if a=='0':
        break
    sum=0
    for i in a:
        sum=sum*10+int(i)
        if(sum>mod-1):            #费小马定理
            sum=sum%(mod-1)
    sum=sum-1
    print((mi(2,sum)%mod+mi(4,sum)%mod)%mod)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值