Challenge: Akhil and GF

Subdomeniu: Number Theory (number-theory)

Scor cont: 40.0 / 40

Submission status: Accepted

Submission score: 1.0

Submission ID: 464734133

Limbaj: cpp14

Link challenge: https://www.hackerrank.com/challenges/akhil-and-gf/problem

Cerinta

After dating for a long time, Akhil is finally going to propose to his girlfriend. She is very strong in mathematics, and will accept his proposal, if and only if Akhil solves a problem given by her. The problem is given below. Help Akhil solve it.

Akhil is given two numbers N and M, and he has to tell her the remainder when $111\cdots \text{(N times)}$ is divided by $M$.  

**Input Format**  
The first line contains an integer $T$ i.e. the number of test cases.  
Each of the next $T$ lines contain two space separated integers, $N$ and $M$.  

**Output Format**  
$T$ lines each containing ouptut for the corresponding test case. 

**Constraints**  
$1 \le T \le 10001$  
$1 \le N \le 10^{16}$  
$2 \le M \le 10^9$  

**Sample Input 00**  

	3
	3 3
	4 7
	5 18
    
**Sample Output 00**  

	0
	5	
	5
    
**Explanation** 

  111 % 3  = 0  
  1111 % 7 = 5  
  11111%18 = 5

Cod sursa

//akhil-and-gf.cpp
//Akhil and GF
//Ad Infinitum - Math Programming Contest August'14
//Author: derekhh

#include<iostream>
using namespace std;

long long mod_mul(long long x, long long y, long long n)
{
	if (!x) return 0;
	return (((x & 1)*y) % n + (mod_mul(x >> 1, y, n) << 1) % n) % n;
}

long long ModExp(long long a, long long b, long long n)
{
	long long c = 1, d = a;
	while (b)
	{
		if (b & 1) c = mod_mul(c, d, n);
		d = mod_mul(d, d, n);
		b >>= 1;
	}
	return c;
}

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		long long n, m;
		cin >> n >> m;
		long long tmp = ModExp(10, n, 9 * m);
		tmp--;
		if (tmp < 0) tmp += 9 * m;
		tmp /= 9;
		cout << tmp << endl;
	}
	return 0;
}
HackerRank Number Theory – Akhil and GF