codeforces 17 D Notepad 快速幂?

题意:求((b-1)*bn-1)%c  b和n都很大很大

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
#include <string>
#include <map>
#include <queue>
#include <stack>
#include <vector>
using namespace std;
#define LL long long
char b[1000005],n[1000005];
int main()
{
    int i,j,k,m,len1,len2,c;
    LL tp,ans,x;
    while(scanf(" %s %s %d",b,n,&c)!=EOF)
    {
        len1=strlen(b);
        x=0;
        for(i=0; i<len1; i++)
        {
            x=x*10+b[i]-‘0‘;
            x%=c;
        }
        ans=x-1;
        if(ans<0) ans+=c;
        len2=strlen(n);
        for(i=len2-1; i>=0; i--)
        {
            if(n[i]>‘0‘)
            {
                n[i]--;
                break;
            }
            n[i]=‘9‘;
        }
        for(i=len2-1; i>=0; i--)
        {
            tp=x;
            for(j=1; j<=9; j++)
            {
                if(j==n[i]-‘0‘) ans*=x;
                x*=tp;
                x%=c;
            }
            ans%=c;
        }
        if(ans==0) ans=c;
        printf("%lld\n",ans);
    }
    return 0;
}
时间: 2024-11-03 21:37:39

codeforces 17 D Notepad 快速幂?的相关文章

CodeForces 450B (矩阵快速幂模板题+负数取模)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51919 题目大意:斐波那契数列推导.给定前f1,f2,推出指定第N项.注意负数取模的方式:-1%(10^9+7)=10^9+6. 解题思路: 首先解出快速幂矩阵.以f3为例. [f2]  * [1 -1] = [f2-f1]=[f3]  (幂1次) [f1]  * [1  0]     [f2]      [f2] 于是fn=[f2] *[1 -1]^(n-2)

CodeForces 185A Plant 矩阵快速幂

题意:最开始给你一个正三角形,每一步,一个正三角形可以变成三个正三角形和一个反三角形,而一个反三角形可以构成一个正三角形和三个反三角形,问额你n步之后一共有多少个正三角形. 解题思路:因为n太大,有10^18这么大,所以我们只能用矩阵快速幂来求. 中间矩阵为 3 1 1 3 初始矩阵为 0 (负) 1 (正) 解题代码: 1 // File Name: temp.cpp 2 // Author: darkdream 3 // Created Time: 2014年09月17日 星期三 11时35

Codeforces - 185A 简单矩阵快速幂

题意:求第n个三角形内部的上三角形个数 对每个三角形分别维护上下三角形个数,记为\(dp[1][i],dp[2][i]\) 规律很明显是 \(dp[1][i+1]=3*dp[1][i]+dp[2][i]\) \(dp[2][i+1]=3*dp[2][i]+dp[1][i]\) 别忘了快速幂里也要long long,白送了个TLE /*H E A D*/ inline ll mod(ll a){return a%MOD;} struct Matrix{ ll mt[5][5],r,c; void

方阵乘法、快速幂

1 #include<cstdio> 2 #include<cstring> 3 const int maxn = 100; 4 typedef struct{ 5 long long Mat[maxn][maxn]; 6 }MAT; 7 long long MOD,d; // d是方阵的行数或者列数 8 // 方阵的乘法,模MOD 9 MAT mul(MAT a,MAT b){ 10 MAT c; 11 memset(c.Mat,0,sizeof(c.Mat)); 12 for(

Codeforces Round #257 (Div. 2) B. Jzzhu and Sequences (矩阵快速幂)

题目链接:http://codeforces.com/problemset/problem/450/B 题意很好懂,矩阵快速幂模版题. 1 /* 2 | 1, -1 | | fn | 3 | 1, 0 | | fn-1 | 4 */ 5 #include <iostream> 6 #include <cstdio> 7 #include <cstring> 8 using namespace std; 9 typedef __int64 LL; 10 LL mod =

Xor-sequences CodeForces - 691E || 矩阵快速幂

Xor-sequences CodeForces - 691E 题意:在有n个数的数列中选k个数(可以重复选,可以不按顺序)形成一个数列,使得任意相邻两个数异或的结果转换成二进制后其中1的个数是三的倍数.求可能形成的不同数列个数(只要选出的数列中,任意两个元素在原序列中的位置不同,就算作不同的序列,比如在原数列[1,1]中选1个,那么第一个1和第二个1要分开算). 方法: 很容易列出dp方程: dp[k][i]表示取了k个,最后一个在第i位.a[i][j]表示i和j异或结果转换成二进制后1的个数

【矩阵快速幂 】Codeforces 450B - Jzzhu and Sequences (公式转化)

[题目链接]click here~~ [题目大意] Jzzhu has invented a kind of sequences, they meet the following property: You are given x and y, please calculate fn modulo1000000007(109?+?7). [解题思路] /*A - Jzzhu and Sequences Codeforces 450B - Jzzhu and Sequences ( 矩阵快速幂 )

Codeforces 450B div.2 Jzzhu and Sequences 矩阵快速幂or规律

Jzzhu has invented a kind of sequences, they meet the following property: You are given x and y, please calculate fn modulo 1000000007 (109 + 7). Input The first line contains two integers x and y (|x|, |y| ≤ 109). The second line contains a single i

CodeForces 185A. Plant(矩阵快速幂)

题目链接:http://codeforces.com/problemset/problem/185/A Dwarfs have planted a very interesting plant, which is a triangle directed "upwards". This plant has an amusing feature. After one year a triangle plant directed "upwards" divides int