题目地址

欧拉函数+矩阵快速幂

  1 #include<cstdio>
  2 #include<algorithm>
  3 #include<string.h>
  4 #include<queue>
  5 #define LL long long
  6 using namespace std;
  7 const int Nmax=10;
  8 LL n,y,x,s,tmp;
  9 int mod;
 10 int oula_mod;
 11
 12 struct Matrix
 13 {
 14     int n,m;
 15     long long map[Nmax][Nmax];
 16     Matrix(int x,int y)
 17     {
 18         n=x;m=y;
 19         for(int i=1;i<=n;i++)
 20             for(int j=1;j<=m;j++)
 21                 map[i][j]=0;
 22     }
 23     Matrix operator * (const Matrix b)
 24     {
 25         Matrix c(n,b.m);
 26         if(m==b.n)
 27         {
 28             for(int i=1;i<=c.n;i++)
 29                 for(int j=1;j<=c.m;j++)
 30                     for(int k=1;k<=m;k++)
 31                         c.map[i][j]=(c.map[i][j]+(map[i][k]*b.map[k][j])%oula_mod)%oula_mod;
 32             return c;
 33         }
 34         printf("error!!!!!!!!!!!!!!\n");
 35     }
 36 };
 37
 38
 39 int oula(int n)
 40 {
 41     int ret=1,i;
 42     for(i=2;i*i<=n;i++)
 43     {
 44         if(n%i==0)
 45         {
 46             n/=i,ret*=i-1;
 47             while(n%i==0) n/=i,ret*=i;
 48         }
 49     }
 50     if(n>1) ret*=n-1;
 51     return ret;
 52 }
 53
 54
 55
 56
 57 Matrix get(long long n)
 58 {
 59     Matrix base(4,4);
 60     base.map[1][1]=1;base.map[1][2]=1;base.map[1][3]=0;base.map[1][4]=0;
 61     base.map[2][1]=0;base.map[2][2]=4;base.map[2][3]=1;base.map[2][4]=4;
 62     base.map[3][1]=0;base.map[3][2]=1;base.map[3][3]=0;base.map[3][4]=0;
 63     base.map[4][1]=0;base.map[4][2]=2;base.map[4][3]=0;base.map[4][4]=1;
 64     Matrix ans(4,4);
 65     for(int i=1;i<=ans.n;i++)
 66         ans.map[i][i]=1;
 67
 68     while(n>0)
 69     {
 70         if(n & 1)
 71             ans=ans*base;
 72         base=base*base;
 73         n>>=1;
 74     }
 75
 76     return ans;
 77 }
 78
 79 long long get_ans(long long times)
 80 {
 81     long long ans=1;
 82     long long base=x;
 83     while(times>0)
 84     {
 85         if(times & 1)
 86             ans=(ans*base)%mod;
 87         base=(base*base)%mod;
 88         times>>=1;
 89     }
 90     return ans;
 91 }
 92
 93
 94 int main()
 95 {
 96
 97     int t;
 98     scanf("%d",&t);
 99     while(t--)
100     {
101         scanf("%lld%lld%lld%lld",&n,&y,&x,&s);
102         mod=s+1;
103         oula_mod=oula(mod);
104         //printf("oula_mod:%d\n",oula_mod);
105         Matrix base(4,1);
106         base.map[1][1]=0;
107         base.map[2][1]=1;
108         base.map[3][1]=0;
109         base.map[4][1]=0;
110         Matrix ans=get(n*y)*base;
111         long long mi=ans.map[1][1]+oula_mod;
112         //printf("mi:%lld\n",mi );
113         //continue;
114         printf("%lld\n",get_ans(mi));
115     }
116     return 0;
117 }

转载于:https://www.cnblogs.com/BBBob/p/5935331.html

HDU 5895 Mathematician QSC相关推荐

  1. 【HDU - 5900】QSC and Master(区间dp)

    题干: Every school has some legends, Northeastern University is the same. Enter from the north gate of ...

  2. HDU-5895 Mathematician QSC

    题目大意: 已知f[0] = 0, f[1] = 1, f[i] = f[i-1] * 2 + f[i-2],且g[n] = g[n-1] + f[n] * f[n],现在给出n,y,x,s,问你x^ ...

  3. c语言定义int 输出4386,C语言 · 矩阵乘法

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  4. 2016.9.18 --- Shenyang ol

    1001 Resident Evil 1002 List wants to travel 1003 hannnnah_j's Biological Test 1004 Mathematician QS ...

  5. HDU5900 QSC and Master(区间DP + 最小费用最大流)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5900 Description Every school has some legends, ...

  6. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  7. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

  8. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  9. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

最新文章

  1. python网络爬虫---selenium的使用
  2. acwing算法题--看图做题
  3. VS2010程序打包操作
  4. Intellij IDEA Debug 调试技巧
  5. JDBC的CRUD操作之PreparedStatement的保存操作
  6. c语言结构体编程,[编程] C语言的结构体详解
  7. vs 中自带的代码混淆器 Dotfuscator (图)
  8. python创建二维数组的方法_Python创建二维数组的正确姿势
  9. Hibernate的双向N-N关联(六)
  10. StackPanel与Grid交叉使用
  11. android 专业ps软件,手机专业ps修图
  12. 中国顶级***--小榕
  13. Java9 正式发布前的尝鲜之下载与配置环境变量
  14. mac 截图工具| Snipaste
  15. 如何获取大数据行业高薪岗位offer?
  16. C++扑克牌随机洗牌抽牌算法
  17. Hibernate用Query删除数据表中的数据的问题(EntityManager.clear())
  18. 使用MultiPowerOnOffTool工具 测试拔插网线对路由器的影响
  19. 借钱赚钱花钱6点认识
  20. excle计算机基础测试,计算机基础测试题--Excel--雨课堂版本--手机版课件.pptx

热门文章

  1. 如何有效练肩部肌肉增加肩宽并且避免斜方肌发达呢?
  2. 视频剪辑软件到底哪个功能强?容易上手并且不要钱的?
  3. 用信号量实现进程互斥、同步、前驱关系
  4. MySQL 5.7 解压版 安装教程(图文详细)[Windows](转载)
  5. PAT乙级1088 三人行 (20分)
  6. sql azure 语法_Azure SQL Server自动故障转移组
  7. sql dbcc_SQL Server中的DBCC命令的概念和基础
  8. sql2012 ssrs_您必须在SQL Server Reporting Services(SSRS)中记录的十件事
  9. alwayson高可用组_AlwaysOn可用性组–如何在集群实例和独立实例之间设置AG(第2部分)
  10. maven项目引用新模块,依赖的jar包与新模块中的jar包版本不一致