2 条题解

  • 0
    @ 2024-5-13 17:15:07
    #include <stdio.h>
    #include <string.h>
    long long n,mod=10000;
    void Matrix1(long long a[2],long long b[2][2])
    {
    	long long c[2]={0};
    	for(int j=0;j<2;j++)
    		{
    			for(int k=0;k<2;k++)
    			{
    				c[j]=(c[j]+a[k]*b[k][j]%mod)%mod;
    			}
    		}
    		memcpy(a,c,sizeof(c));
    }
    void Matrix2(long long b[2][2])
    {
    	long long c[2][2]={0};
    	for(int i=0;i<2;i++)
    	{
    		for(int j=0;j<2;j++)
    		{
    			for(int k=0;k<2;k++)
    			{
    				c[i][j]=(c[i][j]+b[i][k]*b[k][j]%mod)%mod;
    			}
    		 } 
    	}
    	memcpy(b,c,sizeof(c));
    }
    int main()
    {
    	while(~scanf("%lld",&n))
        {   
            if(n==-1) break;
            else
            {  
                long long a[2]={0,1};
                long long b[2][2]={0,1,1,1};
    	        while(n)
    	        {
    		    if(n&1)	Matrix1(a,b);
    		    Matrix2(b);
    		    n>>=1;
    	        }
    	    printf("%lld\n",a[0]);
            }
        }
        return 0;
    }
    
    • @ 2024-5-13 17:17:01

      矩阵快速幂 , 每次取模

信息

ID
116
时间
1000ms
内存
128MiB
难度
8
标签
递交数
75
已通过
10
上传者