Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- using namespace std;
- //умножение по модулю
- unsigned long long xmult(unsigned long long a, unsigned long long b, unsigned long long mod){
- unsigned long long res = 0;
- a %= mod;
- b %= mod;
- while(b) {
- if(b&1){//если нечетное
- res += a;
- res %= mod;
- }
- b >>= 1;
- a <<= 1;
- a %= mod;
- }
- return res;
- }
- //возведение в степень по модулую
- unsigned long long xpow(unsigned long long num, unsigned pow, unsigned long long mod){
- unsigned long long res;
- unsigned long long n=num;
- for(res=1; pow>0; pow>>=1){
- if (pow&1) //если нечетная
- res=xmult(res%mod,n%mod,mod);
- n=xmult(n%mod,n%mod,mod);
- }
- return res;
- }
- /*
- Найти последние n цифр числа (2014^2015)^m.
- В единственной строке даны два целых числа, разделенных пробелом: n (1<=n<18) и m
- (0<=m<=2016).
- Формат выходного файла
- Одно целое число из n знаков - ответ на задачу
- */
- int main(int argc, char* argv[]){
- unsigned long long mod;
- int n,m;
- cin>>n>>m;
- int i=1;
- while(i<n){
- mod*=10;
- i++;
- }
- unsigned long long z=xpow(2014, 2015, mod);
- cout<<xpow(z, m, mod);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement