fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. inline ll add(ll a,ll b,ll MOD) {
  5. a%=MOD;b%=MOD;a += b;
  6. if (a >= MOD) a -= MOD;
  7. return a;
  8. }
  9. inline ll sub(ll a,ll b,ll MOD) {
  10. a%=MOD;b%=MOD;a -= b;
  11. if (a < 0) a += MOD;
  12. return a;
  13. }
  14. inline ll mul(ll a,ll b,ll MOD) {
  15. return a * b % MOD;
  16. }
  17. struct Mat{
  18. int r,c;
  19. vector<vector<ll>> mat;
  20. Mat(int r , int c): r(r) , c(c), mat(r, vector<ll>(c,0)) {}
  21. };
  22. Mat mul_mat(Mat &m1,Mat &m2,ll MOD) {
  23. Mat res(m1.r, m2.c);
  24. for(int i=0;i<res.r;i++) for(int j=0;j<res.c;j++) {
  25. ll sum=0;
  26. for(int k=0;k<m1.c;k++) {
  27. sum+= m1.mat[i][k] * m2.mat[k][j]%MOD;
  28. if(sum>=MOD) sum-=MOD;
  29. }
  30. res.mat[i][j]=sum;
  31. }
  32. return res;
  33. }
  34. Mat I(int n){
  35. Mat res(n,n);
  36. for(int i=0;i<n;i++) res.mat[i][i] = 1;
  37. return res;
  38. }
  39. Mat bin_exp(Mat a , ll b,ll MOD) {
  40. Mat res = I(a.r);
  41. while (b) {
  42. if (b & 1) res =mul_mat(res,a,MOD);
  43. a =mul_mat(a,a,MOD);
  44. b >>= 1;
  45. }
  46. return res;
  47. }
  48. vector<ll> mul_mat_vec(const Mat A, const vector<ll> v,ll MOD) {
  49. int M = A.r;
  50. vector<ll> r(M);
  51. for (int i = 0; i < M; i++) {
  52. ll sum = 0;
  53. for (int j = 0; j < M; j++){
  54. sum+=A.mat[i][j]*v[j]%MOD;
  55. if(sum>=MOD)sum-=MOD;
  56. }
  57. r[i] = sum;
  58. }
  59. return r;
  60. }
  61. int main() {
  62. string x;ll k,m;cin>>x>>k>>m;
  63. ll rem=0;
  64. for(auto ch:x){
  65. rem*=10;
  66. rem+=ch-'0';rem%=m;
  67. }
  68. ll pow10=1;
  69. for(int i=0;i<x.size();i++) pow10=(pow10*10)%m;
  70. Mat trans(2,2);
  71. trans.mat[0][0]=pow10;trans.mat[0][1]=rem;
  72. trans.mat[1][0]=0;trans.mat[1][1]=1;
  73. Mat T=bin_exp(trans,k,m);
  74. vector<ll>base={0,1};
  75. base=mul_mat_vec(T,base,m);
  76. if(base[0]%m==0)cout<<"YES\n";
  77. else cout<<"NO\n";
  78. return 0;
  79. }
Success #stdin #stdout 0.01s 5328KB
stdin
Standard input is empty
stdout
NO