codeforces 584b 超大型指数乘法取模o(logn)

题意是怎么理解的我也不知道,就抄了一下

题目大意:给出n个等边三角形,每个顶点都可以是1~3中的一个数,一个等边三角形三个顶点的总和不能是6。在n个三角形中只要有一个等边三角形满足条件,当前情况就是合格的,问有多少种合格的情况。

解题思路:所有的情况27n,没有一个三角形满足条件7n,案27n−7n

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;

typedef long long ll;
const ll mod = 1e9 + 7;

ll quick_mod(ll a, ll b) {
    ll ans = 1;
    while(b) {
        if(b&1) ans = (ans * a) % mod;
        b >>= 1;
        a = (a * a) % mod;
    }
    return ans;
}  

int main() {
    ll n;
    scanf("%lld", &n);
    ll A = quick_mod(27, n);
    ll B = quick_mod(7, n);
    printf("%lld\n", ((A % mod - B % mod) + mod) % mod);
    return 0;
}
时间: 2024-10-31 14:03:49

codeforces 584b 超大型指数乘法取模o(logn)的相关文章

HDU6128 二次剩余/二次域求二次剩余解/LL快速乘法取模

LINK 题意:求满足模p下$\frac{1}{a_i+a_j}\equiv\frac{1}{a_i}+\frac{1}{a_j}$的对数,其中$n,p(1\leq n\leq10^5,2\leq p\leq10^{18})$ 思路:推式子,两边同乘$(a_i + a_j)^3$,得$a_i^2+a_j^2 \equiv {a_i·a_j} \mod{p}$,进一步$a_i^2+a_j^2+a_i·a_j\equiv {0} \mod{p}$,然后?然后会点初中数竞,或者数感好会因式分解就能看出

快速乘法取模算法

原理: 32+16+4=52 1 LL qmul(LL x, LL y, LL mod) { // 乘法防止溢出, 如果p * p不爆LL的话可以直接乘: O(1)乘法或者转化成二进制加法 2 //快速乘法取模算法 3 4 LL ret = 0; 5 while(y) { 6 if(y & 1) 7 ret = (ret + x) % mod; 8 x = x * 2 % mod; 9 y >>= 1; 10 } 11 return ret; 12 } 原文地址:https://www

ACwing90 64位整数乘法 大数乘法取模

网址:https://www.acwing.com/problem/content/92/ 题解: 大数乘法取模模板. AC代码: #include <bits/stdc++.h> using namespace std; long long add(long long a, long long b, long long p) { long long res = 0; while (b) { if (b & 1) res = (res + a) % p; a = (a * 2) % p

codevs1281 矩阵乘法 快速幂 !!!手写乘法取模!!! 练习struct的构造函数和成员函数

对于这道题目以及我的快速幂以及我的一节半晚自习我表示无力吐槽,, 首先矩阵乘法和快速幂没必要太多说吧,,嗯没必要,,我相信没必要,,实在做不出来写两个矩阵手推一下也就能理解矩阵的顺序了,要格外注意一些细节,比如快速幂时ans矩阵的初始化方式,快速幂的次数,矩阵乘法过程中对临时矩阵的清零,最后输出结果时的初始矩阵...矩阵快速幂好理解但是细节还是有点小坑的.. 下面就是满满的槽点,,高能慎入!!! 对于这个题目要求矩阵过程中对m取模,结果对g取模,我表示难以接受,,上来没看清题直接wa19个点,另

大数乘法取模运算(二进制)

问题: 求 (a*b) % m 的值,其中 a,b,m 是1到10^18: 如果直接乘的话,因为a和b还有m都很大,那么会溢出long long,所以需要一些方法: 朴素的想法是用数组模拟高精度,但是比较麻烦: 二进制数也是满足十进制竖式乘法运算规律的,我们可以模拟二进制乘法竖式来计算(a*b)%m,因为其每次只相当于a乘2,再取模就不会溢出了: 代码: #include <bits/stdc++.h>#define MAXN 100000+10#define ll long longusin

乘法取模

当我要计算两个数相乘后取模的结果时,可以这样写: 1 typedef long long LL; 2 3 LL multi(LL a, LL b, LL mo){ 4 LL ans = 0; 5 while(b){ 6 if(b & 1){ 7 ans += a; 8 if(ans >= mo){ 9 ans -= mo; 10 } 11 } 12 a <<= 1; 13 if(a >= mo){ 14 a -= mo; 15 if(a == 0) return ans;

乘法取模优化

inline long long multi(long long x,long long y,long long mod)//mod long long { long long tmp=(x*y-(long long)((long double)x/mod*y+0.5)*mod); return tmp<0 ? tmp+mod : tmp; } int pdt(int x,int y,int mods) { //汇编优化,易出锅,能不用尽量不用,不知道什么情况下会跑崩,一般没事 int ret;

HDU 5895 Mathematician QSC(矩阵乘法+循环节降幂+除法取模小技巧+快速幂)

传送门:HDU 5895 Mathematician QSC 这是一篇很好的题解,我想讲的他基本都讲了http://blog.csdn.net/queuelovestack/article/details/52577212 [分析]一开始想简单了,对于a^x mod p这种形式的直接用欧拉定理的数论定理降幂了 结果可想而知,肯定错,因为题目并没有保证gcd(x,s+1)=1,而欧拉定理的数论定理是明确规定的 所以得另谋出路 那么网上提供了一种指数循环节降幂的方法 具体证明可以自行从网上找一找 有

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)