题目背景
原题链接:https://oier.team/problems/X2D。
ねえ もしも全て投げ捨てられたら
呐 若然能将一切舍弃的话
笑って生きることが楽になるの
笑着活下去这样的事就会变的轻松吗
题目描述
给定两个正整数 n,k。
定义 f(x)=i=1∑xgcd(i,i⊕x)k。计算 i=1∑nf(i)。其中 gcd(a,b) 表示 a 和 b 的最大公因数,⊕ 表示按位异或,即 C++ 中的 ^
。
由于答案可能很大,所以你只需要输出答案对 109+7 取模的结果。
输入格式
本题有多组测试数据。
输入的第一行包含一个整数 T,表示测试数据组数。
接下来依次输入每组测试数据。对于每组测试数据,输入一行两个正整数 n,k。
输出格式
对于每组测试数据,输出一行一个整数,表示答案对 109+7 取模的结果。
提示
【样例解释】
对于第 1 组测试数据:
f(1)=gcd(1,0)2=1。
f(2)=gcd(1,3)2+gcd(2,0)2=5。
f(3)=gcd(1,2)2+gcd(2,1)2+gcd(3,0)2=11。
f(1)+f(2)+f(3)=17。
【数据范围】
对于所有测试数据,1≤T≤1000,1≤n≤2×105,∑n≤2×105,1≤k≤109。
本题采用捆绑测试。
设 ∑n 表示单个测试点中 n 的和。
- Subtask 1(10 points):∑n≤2000。
- Subtask 2(12 points):∑n≤104。
- Subtask 3(15 points):k=1。
- Subtask 4(45 points):∑n≤105。
- Subtask 5(18 points):无特殊限制。