hdu 4549 欧拉定理+各种快速幂
来源:互联网 发布:win7 nls数据怎么修复 编辑:程序博客网 时间:2024/05/22 03:21
与hdu 3221类似......不想多说
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>#define MOD 1000000007using namespace std;typedef long long LL;struct mat { LL m[3][3]; mat ( ) { memset ( m , 0 , sizeof ( m ) ); }};mat multi ( mat a , mat b , LL mod ){ mat c; for ( LL i = 1 ; i < 3 ; i++ ) for ( LL j = 1 ; j < 3 ; j++ ) if ( a.m[i][j] ) for ( LL k = 1 ; k < 3 ; k++ ) c.m[i][k] = (c.m[i][k] + a.m[i][j]*b.m[j][k]%mod )%mod; return c; }mat quickMulti ( mat a , LL n , LL mod ){ mat ans; for ( int i = 1 ; i < 3 ; i++ ) ans.m[i][i] = 1; while ( n ) { if ( n&1 ) ans = multi ( ans , a , mod ); a = multi ( a , a , mod ); n >>= 1; } return ans;}LL pow ( LL num , LL n ){ LL ans = 1; while ( n ) { if ( n&1 ) ans = ans * num % MOD; num = num*num%MOD; n >>= 1; } return ans;}LL euler ( LL x ){ LL res = x; for ( int i = 2 ; i*i<=x ; i++ ) { if ( x%i ) continue; res -= res/i; while ( x%i==0 ) x /= 1; } if ( x > 1 ) res -= res/x; return res;}LL index ( LL n , LL mod ){ LL a = 1 , b = 0 ,temp , i ; for ( i = 1 ; i <= n ; i++ ) { temp = a + b; b = a; a = temp; if ( a >= mod ) break; } if ( i > n ) return a; mat ma ,mb; ma.m[1][1] = mb.m[1][1] = mb.m[2][1] = mb.m[1][2]=1; mb = quickMulti ( mb , n , mod ); ma = multi ( ma , mb , mod ); return ma.m[1][1]%mod + mod;}int main ( ){ LL phi = euler ( MOD ); LL a,b,n; while ( ~scanf ( "%lld%lld%lld" , &a , &b , &n ) ) { if ( n == 0 ) { printf ( "%lld\n" , a%MOD ); continue; } if ( n == 1 ) { printf ( "%lld\n" , b%MOD ); continue; } if ( a == 0 || b == 0 ) { printf ( "0\n" ); continue; } LL ans = pow ( a , index(n-2 , phi ))*pow( b , index ( n-1 , phi ))%MOD; printf ( "%lld\n" , ans ); }}
0 0
- hdu 4549 欧拉定理+各种快速幂
- HDU-4549(矩阵快速幂+欧拉定理)
- hdu-4549(矩阵快速幂+欧拉定理)
- hdu 3221 欧拉定理 +快速幂+矩阵快速幂
- hdu 1395 欧拉定理+快速幂+素数判定
- HDU 5895 欧拉定理+快速幂+公式
- hdu 4549 M斐波那契数列 【矩阵+快速幂+欧拉定理】
- BZOJ 1409 快速幂+欧拉定理
- [ 欧拉定理 矩阵快速幂 ] BZOJ5118
- hdu 3307 Description has only two Sentences 欧拉定理+快速幂
- hdu 2879 HeHe (数论:积性函数+欧拉定理+快速幂)
- hdu-5868 Different Circle Permutation 矩阵快速幂 + 欧拉函数 + polya计数定理
- HDU 5895 Mathematician QSC(矩阵快速幂+扩展欧拉定理)
- HDU 1395(欧拉定理)
- hdu 1418 欧拉定理
- hdu 2462(数论:欧拉定理+快速幂取模优化+欧拉函数)
- POJ2154 Color【Polya定理】【欧拉函数】【整数快速幂】
- Mathematician QSC(欧拉定理+矩阵快速幂)
- pptp设置及局部vpn(及vpn下ssh无法访问远程主机的问题解决)
- tomcat一闪而过
- 剖析进销存管理系统软件需求管理重要性
- 如何设置AFNetworking和SDWebImage的cookie
- Android Chromium:不成功的尝试,无法从Typeface.java类获得C++ SkTypeface对象
- hdu 4549 欧拉定理+各种快速幂
- IntelliJ IDEA+maven+perforce+tomcat部署(web环境搭建)
- 基于laravel开发的多用户博客系统(二)
- Mongodb学习笔记 — 插入
- 《MonkeyRunner原理剖析》第九章-MonkeyImage实现原理 - 第四节 - 图片通用类BufferedImage
- 简单介绍404页面
- 解析sed -n '/^AAAA/{:a;N;${s/\(.*BBBB[^\n]*\).*/\1/p};Ta}'
- struts的modelDriven的使用注意事项
- Java 容易忽略的知识点