这道题能否不用快速幂解

我用找循环的方法,可是最后2个点超时的

2 条评论

  • @ 2015-10-23 19:52:01

    找循环应该可解。最后2个点超时的原因是因为你自己输入

    pascal code

    program ex;
    var i,sum:longint;
    begin
    for i:=1 to 1000000000 do
    inc(sum);

    write(sum);
    end.

    试试。光这样就超时了,更别说10乘起来然后那个啥。

    唯一的办法就是按楼下那样,不是10个10个乘,你可以10000 10000的乘之类。

    当然也可以找循环然后用快速幂,一样的其实。但是用了快速幂了的话就不需要找循环了。
    其实少这20分也没啥问题、

  • @ 2015-10-23 00:19:18

    可以,只要一个10倍的优化就可以了
    #include<iostream>
    using namespace std;
    #define maxt 1000000000000
    int main()
    {
    long long n,m,k,x,t,t1,t2;
    cin>>n>>m>>k>>x;t=m;
    t1=k/12;t2=k%12;
    for(int i=0;i<t2;i++)t=t*10;//这里不管之前取多少位压缩都要乘10
    t%=n;
    for(int i=0;i<t1;i++){
    t=t*maxt;
    t%=n;
    }
    cout<<(x+t)%n<<endl;
    return 0;
    }

    • @ 2015-10-23 00:20:24

      我这个代码最大数据要700ms了,还是快速幂正解稳妥点

  • 1

信息

ID
1841
难度
6
分类
(无)
标签
递交数
6573
已通过
1791
通过率
27%
被复制
10
上传者