28 条题解

  • -1
    @ 2024-2-21 9:55:37
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int main()
    {
        ll a,b,p;
        cin>>a>>b>>p;
        ll ans=1%p;//这里注意modp,否则p为1过不了
        while(b)
        {
            if(b&1) ans=ans*a%p;
            a=a*a%p;
            b=b>>1;
        }
        cout<<ans;
    }
    
    
    • -1
      @ 2023-9-17 22:50:10

      自认为代码很通俗

      首先,直接算是肯定不行的,我们要一步一步来

      相关知识请看 OI Wiki

      #include<bits/stdc++.h>
      using namespace std;
      int main(){
          long long b,p,k;
          cin >> b >> p >> k;
          long long ans = 1;
          while (p != 0){
              if(p % 2 !=0)ans = ans * b % k;
              p /= 2;
              b = b * b % k;
          }
          cout << ans;
      }
      
      • -1
        @ 2023-8-12 15:12:01

        核心代码一行的快速幂:

        #include <bits/stdc++.h>
        using namespace std;
        typedef long long ll;
        ll a, b, p;
        ll power (ll a, ll b, ll p) {
        	return b == 0? 1: (b & 1? a: 1) * power (a * a % p, b >> 1, p) % p;
        }
        int main () {
            scanf ("%lld%lld%lld", &a, &b, &p);
            printf ("%lld", power (a, b, p));
            return 0;
        }
        

        压行(164B)!

        #import<iostream>
        typedef long long L;L a,b,p;L P(L a,L b,L p){return b?(b&1?a:1)*P(a*a%p,b/2,p)%p:1;}int main(){std::cin>>a>>b>>p;std::cout<<P(a,b,p);return 0;}
        

        顺便找了一个不递归的压了压(182B):

        #import<iostream>
        typedef long long L;L a,b,p;L P(L a,L b,L p){L S=1;while(b){if(b&1)S=S*a%p;a=a*a%p;b/=2;}return ans;}int main(){std::cin>>a>>b>>p;std::cout<<P(a,b,p);return 0;}
        

        可以发现,前者代码短一点。

        (喂喂我这个大码量人为什么要玩 Code Golf 啊

        • -1
          @ 2023-8-11 15:37:15

          Hydro H1032【模板】快速幂 & 洛谷 P1226 题解

          #include<iostream>
          using namespace std;
          long long a,b,p,q,w;
          int loop(long long x,long long y)
          {
              if(y==0)
              {
                  return 1;
              }
              long long res=1;
              while(y)
              {
                  if(y&1)
                  {
                      res=res*x%p;  /*需要%*/
                  } 
                  x=x*x%p;  /*需要%*/
          //      cout<<x<<endl;
                  y>>=1;
              } 
              return res;
          }
          
          int main()
          {
              cin>>a>>b>>p;
              q=loop(a,b);
              w=q % p;
              cout<<w<<endl;
          }
          
          • -1
            @ 2023-7-11 8:44:50

            整点最短解。以下是利用 python3 完成的一个很短的写法(37 B):

            print(pow(*map(int,input().split())))
            
            • @ 2023-8-27 9:30:46

              Python自带高精度,是一个简单的语言

          • -1
            @ 2023-1-21 12:53:38

            其实很简单。。。

            #include<iostream>
            using namespace std;
            #define int long long
            int a,b,p;
            int power(int a,int b,int p){
            	int ans=1;
            	while(b){
            		if(b&1==1)ans=ans*a%p;
            		a=a*a%p;
            		b>>=1;
            	}return ans;
            }
            signed main(){
            	cin>>a>>b>>p;
            	cout<<power(a,b,p);return 0;
            }
            
            • -2
              @ 2022-3-16 13:34:42

              python代码yyds(什

              a,b,c=input().split()

              a=int(a)

              b=int(b)

              c=int(c)

              print(pow(a,b,c))

              • -9
                @ 2021-11-6 16:49:03

                #include<bits/stdc++.h>

                using namespace std;

                int main()

                {

                unsigned long long a,b,mode ;
                
                cin>>a>>b>>mode;
                
                int sum=1;
                
                a =a%mode;
                
                while(b>0)
                
                {
                
                    if (b%2==1)
                
                	{
                
                		sum =(sum*a)%mode;
                
                	}
                
                    b /= 2;
                
                    a = (a * a) % mode;
                

                }

                cout<<sum;

                }

                信息

                ID
                171
                时间
                1000ms
                内存
                256MiB
                难度
                2
                标签
                递交数
                1264
                已通过
                398
                上传者