Rng
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 227 Accepted Submission(s): 144
Problem Description
Avin is studying how to synthesize data. Given an integer n, he constructs an interval using the following method: he first generates a integer r between 1 and n (both inclusive) uniform-randomly, and then generates another integer l between 1 and r (both inclusive) uniform-randomly. The interval [l, r] is then constructed. Avin has constructed two intervals using the method above. He asks you what the probability that two intervals intersect is. You should print p* q(−1)(MOD 1, 000, 000, 007), while pq denoting the probability.
Input
Just one line contains the number n (1 ≤ n ≤ 1, 000, 000).
Output
Print the answer.
Sample Input
1 2
Sample Output
1 750000006
#include <cstdio>
#include <cstring>
#include <iostream>
#define LL long long
using namespace std;
const LL mod=1e9+7;
int n;
LL ksm(LL a,LL b)
{
LL ans=1;
while(b)
{
if(b&1) ans=(ans*a)%mod;
a=(a*a)%mod;
b=b>>1;
}
return ans;
}
int main(int argc, char const *argv[])
{
while(scanf("%d",&n)!=EOF)
{
LL qwe=(n+1)*ksm(2*n,mod-2)%mod;
printf("%lld\n",qwe );
}
return 0;
}