不是莫比乌斯反演,不是欧拉反演
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给定三个正整数 l,r,n

令 S 表示由正整数区间 [l,r] 内的所有正整数所组成的集合,即 S=\{x||l\leq{x}\leq{r},x\in N^*\}

T 表示集合 S 的子集;

f(T) 表示子集 T 内的所有正整数的乘积,特别地,若 T 为空集,则定义 f(T)=1

令 gcd(x,y) 表示整数 x,y 的最大公因数;

\sum_{T\in{S}}gcd(f(T),n) 对 10^9+7 取模后的值。

输入描述:

第一行输入三个正整数 l,r,n\ (1\leq{l}\leq{r}\leq{10^9},1\leq{n}\leq{10^7})

输出描述:

输出一个整数 ans,表示 \sum_{T\in{S}}gcd(f(T),n) 对 10^9+7 取模后的值。
示例1

输入

复制
1 4 2

输出

复制
28
示例2

输入

复制
1 100000000 114514

输出

复制
898108410