求N的N次方(快速冪取模)
分治演算法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。
例題:給定一個整數N(N<=1 000 000 000),求N的N次方的最後一個數字。
首先,暴力的時間複雜度為O(N),對於較大的N顯然太慢。所以我們選取快速冪取模 的方法,基於公式:
(a×b)%=((a%c)×(b%c))%c。
#include<iostream> using namespace std; long long mod(long long a,long long b) { if(b==1) return a; long long s=mod(a,b/2)%10; if(b%2==0) return (s*s)%10; else return (s*s*a)%10; } int main() { int n; cin>>n; cout<<mod(n,n)<<endl; return 0; }
相關推薦
求N的N次方(快速冪取模)
分治演算法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 例題:給定一個整數N(N<=1 000 000 000),求N的N次方的最後一個數字。 首先,暴力的時間複雜度為O(N),對於較大的N顯然太慢。所以我們選取快
HDU 1852 Beijing 2008(快速冪+取模)
Problem Description As we all know, the next Olympic Games will be held in Beijing in 2008. So the year 2008 seems a little specia
HDU 2035 人見人愛A^B(快速冪取模 )
人見人愛A^B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su
Carmichael Numbers 數論(快速冪取模 + 篩法求素數)
M - Carmichael Numbers Time Limit:3000MS Memory Limit:0KB 64bit IO Fo
NYOJ 301 遞推求值【矩陣快速冪取模】
遞推求值 時間限制:1000 ms | 記憶體限制:65535 KB 難度:4 描述 給你一個遞推公式: f(x)=a*f(x-2)+b*f(x-1)+c 並給你f(1),f(2
EOJ3134. 簡訊啟用碼(大數冪取模)
題面 輸入只有5位,所以轉化為long long型別用快速冪取模 前面補0的寫法printf("%05lld\n",ans);如果ans不足5位會在前面補0 1 #include<bits/stdc++.h> 2 using namespace std; 3
51nod 1113 矩陣連乘快速冪模板 (對100000007取模)
#include<cstdio> #include<cmath> #include<algorithm> #define ll long long #define M 1000000007 using namespace std; c
快速冪取模和快乘取模
要去 ont pow 取模 當下 tex str 過程 return 一、快速冪取模概念 快速冪取模,顧名思義,就是快速的求一個冪式的模(余),比如a^b%c,快速的計算出這個式子的值。 在程序設計過程中,經常要去求一些大數對於某個數的余數,為了得到更快、計算範圍更
【模板】快速冪取模
模板 space 變量 pac esp const def class cstring 快速冪取模的模板,要註意所有變量都要開成long long類型的防溢出: #include<cstdio> #include<algorithm>
POJ 3233-Matrix Power Series( S = A + A^2 + A^3 + … + A^k 矩陣快速冪取模)
spa nta plm lines case arch lang stream 矩陣 Matrix Power Series Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 20309
快速冪取模ADT
col 復雜度 mod 狀態 log post while color ret int pow_mod(int a, int n, int m){ if(n==0) return 1; int x=pow_mod(a, n/2, m); long
UVA 11582 Colossal Fibonacci Numbers!(循環節打表+冪取模)
數列 targe CA == ons printf sin for pan 題目鏈接:https://cn.vjudge.net/problem/UVA-11582 1 /* 2 問題 3 輸入a,b,n(0<a,b<2^64(a and bwill n
快速冪取模(當數很大時,相乘long long也會超出的解決辦法)
結合 超出 但是 long 數字 也會 連續 return result 當幾個數連續乘最後取模時,可以將每個數字先取模,最後再取模,即%對於*具有結合律。但是如果當用來取模的數本身就很大,采取上述方法就不行了。這個時候可以借鑒快速冪取模的方法,來達到大數相乘取模的效果。
快速冪取模算法
val range 引入 fast fine eva wid 假設 占用 1.大數模冪運算的缺陷: 快速冪取模算法的引入是從大數的小數取模的樸素算法的局限性所提出的,在樸素的方法中我們計算一個數比如5^1003%31是非常消耗我們的計算資源的,在整個計算過程中最麻煩的就是
快速冪取模
typedef ret () str pre namespace amp mes pri #include<iostream> #include<cstdio> #include<cmath> #include<cstring&g
【費馬小定理+快速冪取模】ACM-ICPC 2018 焦作賽區網絡預賽 G. Give Candies
print using pri long long ger ssi bit one ive G. Give Candies There are N children in kindergarten. Miss Li bought them N candies. To mak
快速冪和快速冪取模
它的 signed 1.5 原來 現在 轉化 mil ram 自己 首先,快速冪的目的就是做到快速求冪,假設我們要求a^b,按照樸素算法就是把a連乘b次,這樣一來時間復雜度是O(b)也即是O(n)級別,快速冪能做到O(logn),快了好多好多。它的原理如下: 假設我們要
Hdu 2685 I won't tell you this is about number theory 快速冪取模+gcd
Problem Description To think of a beautiful problem description is so hard for me that let's just drop them off. :) Given four integers a,m,n,k,and
快速冪取模的計算複雜度
背景:RSA加密演算法: 的計算複雜度 計算原理及步驟 ,故將M縮小至n的餘數範圍內 (最核心的思想) 不斷的將變為,舉個例子:,這樣的話每一次就只需要計算,每一步省一半的計算量 但如果某一步的是奇數,就把它直接算到裡面 從第二步可以看出,演算法的複雜度是
POJ 1995 Raising Modulo Numbers(快速冪取模)
POJ1995 題目大意 有N個人,每個人給出兩個數字a,b,求∑(Ai\^Bi) mod M。 Input 3 16 4 2 3 3 4 4 5 5 6 36123 1 2374859 3029382 17 1 3 18132 Output