Challenge: Sherlock and Square

Subdomeniu: Algebra (algebra)

Scor cont: 30.0 / 30

Submission status: Accepted

Submission score: 1.0

Submission ID: 464734347

Limbaj: cpp14

Link challenge: https://www.hackerrank.com/challenges/sherlock-and-square/problem

Cerinta

Watson gives a square of side length 1 to Sherlock. Now, after each second, each square of some arbitrary side $L$ will break into four squares each of side $L/2$(as shown in the image below). 

![img][123]

Now, Watson asks Sherlock: What will be the sum of length of solid lines after $N$ seconds?  

As the number can be large print result mod $(10^9 + 7)$.

For example, after 0 seconds, the length is 4.    
After 1 second, the length is 6.

**Input Format**    
First line contains $T$, the number of testcases. Each testcase contains $N$ in one line.   

**Output Format**

For each testcase, print the required answer in a new line. 

**Constraints**   
$1 \le T \le 10^5$    
$0 \le N \le 10^9$

**Sample input**

    3
    0
    1
    5
    
**Sample output**

    4
    6
    66

[123]: http://i.imgur.com/yXME9kL.png

Cod sursa

//sherlock-and-square.cpp
//Sherlock and Square
//Weekly Challenges - Week 11
//Author: derekhh

#include<iostream>
using namespace std;

const int MOD = 1000000007;

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

int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		int n;
		cin >> n;
		cout << (ModExp(2, n + 1, MOD) + 2) % MOD << endl;
	}
	return 0;
}
HackerRank Algebra – Sherlock and Square