记录编号 158267 评测结果 AAAAAAAAAA
题目名称 [CQOI 2015] 选数 最终得分 100
用户昵称 GravatarAsm.Def 是否通过 通过
代码语言 C++ 运行时间 0.005 s
提交时间 2015-04-13 20:36:56 内存使用 0.29 MiB
显示代码纯文本
/***********************************************************************/
/**********************By Asm.Def-Wu Jiaxin*****************************/
/***********************************************************************/
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cctype>
#include <algorithm>
#ifdef DEBUG
#include <sys/timeb.h>
#endif
using namespace std;
#define SetFile(x) ( freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout) );
#define getc() getchar() 
template<class T>inline void getd(T &x){
	char ch = getc();bool neg = false;
	while(!isdigit(ch) && ch != '-')ch = getc();
	if(ch == '-')ch = getc(), neg = true;
	x = ch - '0';
	while(isdigit(ch = getc()))x = x * 10 - '0' + ch;
	if(neg)x = -x;
}
#ifdef DEBUG
#include <sys/timeb.h>
timeb Tp;
#endif
/***********************************************************************/
const int maxn = 100004, mod = 1000000007;
typedef long long LL;
inline int powmod(int a, int n){
	int ans = 1;
	while(n){if(n & 1)ans = (LL)ans * a % mod;a = (LL)a * a % mod;n >>= 1;}
	return ans;
}

inline void work(){
	int f[maxn], N, K, L, H, i, j, t, *it;getd(N), getd(K), getd(L), getd(H);
	L = (L - 1) / K;H /= K;
	int len = H - L;
	for(i = len, it = f + i;i;--i, --it){
		t = H / i - L / i;//多少个i的倍数
		*it = (powmod(t, N) + mod - t) % mod;
		for(j = i << 1;j <= len;j += i)
			*it = (*it + mod - f[j]) % mod;
	}
	if(L <= 1 && H > 1)++f[1];
	printf("%d\n", f[1]);
}

int main(){

#ifdef DEBUG
	freopen("test.txt", "r", stdin);
	ftime(&Tp);
	time_t Begin_sec = Tp.time, Begin_mill = Tp.millitm;
#elif !defined ONLINE_JUDGE
	SetFile(cqoi15_number);
#endif
	work();

#ifdef DEBUG
	ftime(&Tp);
	printf("\n%.3lf sec \n", (Tp.time - Begin_sec) + (Tp.millitm - Begin_mill) / 1000.0);
#endif
	return 0;
}