Hdu 1695
来源:互联网 发布:linux内存管理源码 编辑:程序博客网 时间:2024/06/09 21:44
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=1695
题目大意:
给定区间
分析:
由于题目给定了一个特殊条件,a=c=1,所以其实转化为了求
首先一个区间内与x互质的数的个数我们可以用容斥快速的求得,而区间又不是很大,所以可以直接暴力整个区间,求所有的互质数对
代码:
//#include<bits/stdc++.h>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const ll mod = 1e9+7;ll a,b,c,d,k;const int maxn = 100000+10;vector<int> ft[120005];bool isprime[120000];void init(){ for (int i = 2 ; i <= maxn ; i ++) { if (!isprime[i]) { for (int j = i ; j <= maxn ; j += i) { isprime[j] = true; ft[j].push_back(i); } } }}ll solve(int x,int sta,ll n){ int pos = 0; ll temp = 1; while (sta) { if (sta&1) temp *= ft[x][pos]; pos ++; sta >>= 1; } return n/temp;}int main(){ init(); int T,t=1; scanf("%d",&T); while (T--) { scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&k); printf("Case %d: ",t++); if (k==0) { printf("0\n"); continue; } b/=k;d/=k; if (b*d==0) printf("0\n"); else { if (b>d) swap(b,d); ll ans = 0; for (int i = 1 ; i <= d ; i ++) { ans += min(i*1LL,b); for (int j = 1 ; j < (1<<ft[i].size()); j ++) { ll temp = solve(i,j,min(i*1LL,b));int cp = j,cnt = 0; //printf("cp = %d\t",cp); while (cp) { cp -= cp&(-cp); cnt++; } //printf("cnt = %d\n",cnt); if (cnt&1) ans -= temp; else ans += temp; } } printf("%lld\n",ans); } } return 0;}
阅读全文
0 0
- hdu 1695
- HDU 1695
- hdu 1695
- HDU 1695
- Hdu 1695
- hdu 1695 hdu 2841 容斥原理
- HDU 1695 GCD 数论
- hdu 1695 GCD
- hdu 1695 GCD
- HDU 1695 GCD (数论)
- hdu 1695 GCD
- HDU 1695 GCD
- HDU 1695 GCD
- HDU - 1695 GCD
- HDU 1695 GCD
- HDU 1695 GCD
- HDU 1695(容斥)
- HDU 1695 GCD
- python中模块导入语句 from ..import ..与from import as的区别
- Python-os模块详解
- 抓住业务核心,避免过度抽象
- 这是一篇 观后感--英语课堂
- About AF_NETLINK in Linux Socket
- Hdu 1695
- internet连接共享
- 进程间通信之管道
- 单链表的倒数第K个节点
- 8.SAX
- DSP大小端模式
- 层次分析法MATLAB程序
- 冒泡排序
- C语言文件操作