要求从满足gcd(x, y) = k的对数,其中x属于[1, n], y属于[1, m]

gcd(x, y) = k

==>gcd(x/k, y/k) =1

x/k属于[1, n/k], y/k属于[1, m/k]

又因为对数不可以重复,所以我可以限制对于gcd(x, y)中,让y>=x,这样就不会重复了,然后问题转化成了对于[1, n/k]区间内的每一个 i ,求 i 与 [i,m]中的数互质的对数,然后对于每一个 i 的答案相加求和

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x & (-x))
#define INOPEM freopen("in.txt", "r", stdin)
#define OUTOPEN freopen("out.txt", "w", stdout) typedef unsigned long long int ull;
typedef long long int ll;
const double pi = 4.0*atan(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+;
const int maxm = 1e9+;
const int mod = 1e9+;
using namespace std; int n, m;
int T, tol;
bool pri[maxn];
vector<int> vec[maxn]; void handle() {
memset(pri, true, sizeof pri);
for(int i=; i<maxn; i++) {
if(pri[i]) {
vec[i].push_back(i);
for(int j=; i*j<maxn; j++) {
vec[i*j].push_back(i);
pri[i*j] = false;
}
}
}
} ll solve(ll x, int k) {
ll ans = ;
int len = vec[k].size();
for(int i=; i<(<<len); i++) {
int cnt = ;
ll tmp = ;
for(int j=; j<len; j++) {
if(i & (<<j)) {
cnt++;
tmp *= vec[k][j];
}
}
if(cnt & ) ans += x / tmp;
else ans -= x / tmp;
}
return ans;
} int main() {
handle();
int cas = ;
int T;
scanf("%d", &T);
while(T--) {
int a, b, k;
scanf("%d%d%d%d%d", &a, &n, &b, &m, &k);
if(k == ) {
printf("Case %d: 0\n", cas++);
continue;
}
n /= k, m /= k, k = ;
if(n > m) swap(n, m);
ll ans = ;
//[i, m]
for(int i=; i<=n; i++) {
ans += 1ll * (m-i+) - 1ll * (solve(m, i) - solve(1ll * (i-), i));
}
printf("Case %d: %I64d\n", cas++, ans);
}
return ;
}

最新文章

  1. Ubuntu系统下Xen虚拟机的基本安装方法(代码创建)
  2. js 求时间差
  3. no sigar-amd64-winnt.dll in java.library.path 错误
  4. HDU 1257 最少拦截系统 (DP || 贪心)
  5. Web 网页常见问题集锦
  6. struts2 Session拦截器
  7. mac 下安装securecrt
  8. 【读书笔记】-- 你不知道的JavaScript
  9. 201521123049 《JAVA程序设计》 第6周学习总结
  10. Minutes和TotalMinutes的区别
  11. Docker-Compose入门
  12. day13_DOM
  13. UE4 二维相关
  14. metamask源码学习-inpage.js
  15. window配置右键菜单
  16. Ubuntu 16.04设置rc.local开机启动命令/脚本的方法
  17. 09Vue.js快速入门-Vue入门之Vuex实战
  18. 【RF库Collections测试】Get Dictionary Values
  19. Python开发【Django】:模板语言
  20. Java 锁机制总结

热门文章

  1. Bootstrap知识记录:表格和按钮
  2. CentOS 6.4 源码安装MySQL 5.6
  3. C# Note31: 如何使用Visual Studio做单元测试
  4. spring boot session error
  5. centos7根分区扩容(亲测有效)
  6. div中的相对定位与绝对定位
  7. python设计模式第九天【策略模式】
  8. PyCharm的使用
  9. pip 升级
  10. How to remove ROM in MAME