#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define maxn 5000005
ll n,m,K; ll Pow(ll a,ll b){
ll res=;
while(b){
if(b%)res=res*a%mod;
b>>=;a=a*a%mod;
}
return res;
}
bool vis[maxn];
ll prime[maxn],G[maxn],sum[maxn],mu[maxn],mm;
void init(){
mu[]=G[]=;
for(int i=;i<maxn;i++){
if(!vis[i]){
prime[++mm]=i;
mu[i]=-;
G[i]=Pow(i,K)-;
if(G[i]<)G[i]+=mod;
}
for(int j=;j<=mm;j++){
if(i*prime[j]>=maxn)break;
vis[i*prime[j]]=;
if(i%prime[j]==){
mu[i*prime[j]]=;
G[i*prime[j]]=G[i]*Pow(prime[j],K)%mod;
break;
}
else {
mu[i*prime[j]]=-mu[i];
G[i*prime[j]]=G[i]*G[prime[j]]%mod;
}
}
}
for(int i=;i<maxn;i++)
sum[i]=(sum[i-]+G[i])%mod;
} int main(){
int t;cin>>t>>K;
init();
while(t--){
cin>>n>>m;
if(n>m)swap(n,m);
ll ans=;
for(int l=,r;l<=n;l=r+){
r=min(n/(n/l),m/(m/l));
ll tmp=((sum[r]-sum[l-])%mod+mod)%mod;
ans=(ans+tmp*(n/l)%mod*(m/l)%mod)%mod;
}
cout<<ans<<'\n';
}
}

最新文章

  1. [Scala] 快学Scala A2L2
  2. win7安装Linux
  3. python网络编程-socket
  4. AJAX JSONP源码实现(原理解析)
  5. const与#define宏常量 , inline与#define
  6. 后台获取不规则排列RadioButton组的值
  7. python 基础——装饰器
  8. [转]更新Debian软件源
  9. OD: First Step
  10. 开源yYmVc项目 v 0.2 版本号介绍
  11. Objective-C代码块语法(block)使用
  12. 利用 Grunt (几乎)无痛地做前端开发 (一)之单元测试
  13. Windows下彻底卸载删除SQL Serever2012
  14. Java大世界
  15. 输入流IS和输出流OS学习总结
  16. Shell学习之结合正则表达式与通配符的使用(五)
  17. Python pickle使用
  18. 升级pip10.0.0后出现ModuleNotFoundError: No module named 'pip'的问题
  19. AI学习经验总结
  20. 【总结】redis和memcached的区别

热门文章

  1. js实现点击按钮控制展开与收起.
  2. nodejs 模板引擎jade的简单使用(2)
  3. vue组件 is ref
  4. laravel多字段模糊匹配
  5. Python查看文件属性
  6. leetcood学习笔记-14*-最长公共前缀
  7. SQL 空值
  8. 二:unittest框架配合selenium之xpath定位
  9. node.js是用来做什么的
  10. Linxu下JMeter进行接口压力测试