给一个数字,把他分成若干份,求乘积最大

来源:互联网 发布:淘宝店铺装修特效 编辑:程序博客网 时间:2024/05/22 00:22

原理即是要尽量多的弄出3

#include <iostream>#include"cstdio"using namespace std;long long quick(long long a,long long b,long long c){    long long ans=1;    a=a%c;    while(b>0)    {        if(b%2==1)            ans=(ans*a)%c;        b=b/2;        a=(a*a)%c;    }    return (long long)ans;}int main(){    int t,i;    long long k;    scanf("%d",&t);    for(i=0;i<t;i++){        scanf("%lld",&k);        if(k==1){            printf("1\n");            continue;        }        if(k%3==1) printf("%lld\n",(4*quick(3,(k-4)/3,1000000007))%1000000007);        if(k%3==2) printf("%lld\n",(2*quick(3,(k-2)/3,1000000007))%1000000007);        if(k%3==0) printf("%lld\n",quick(3,k/3,1000000007));    }    return 0;}

错误原因:没想到快速幂能解决那么大的数据(3的3000万次),递归的解决太麻烦而且不是很正确。

阅读全文
0 0
原创粉丝点击