HDU 4135 Co-prime
2016-03-30 18:44
369 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4135
题意:求范围内有多少数和m互质。
思路:容斥定理模板,将m分解质因数,直接容斥统计答案不与m互质的数,然后用总数减去即可。
题意:求范围内有多少数和m互质。
思路:容斥定理模板,将m分解质因数,直接容斥统计答案不与m互质的数,然后用总数减去即可。
#include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <stack> #include <map> #include <queue> #include <utility> using namespace std; #define rep(i,j,k) for (int i=j;i<=k;i++) #define Rrep(i,j,k) for (int i=j;i>=k;i--) #define Clean(x,y) memset(x,y,sizeof(x)) #define LL long long #define ULL unsigned long long #define inf 0x7fffffff #define mod %100000007 int T; LL A,B; int n,m; int p[50]; void init(int x) { m = 0; for(int i = 2; i * i <= x; i++) if ( x%i == 0 ) { p[++m] = i; while( x % i == 0 ) x/=i; } if ( x>1 ) p[++m] = x; } LL cal(LL x) { LL ans = 0; int uplim = 1<<m; rep(i,1,uplim-1) { int num = 0; int cnt = 1; rep(j,0,m-1) if ( i & (1<<j) ) { num++; cnt*=p[j+1]; } if( num & 1 ) ans+=x/cnt; else ans-=x/cnt; } return x-ans; } int main() { scanf("%d",&T); rep(kase,1,T) { scanf("%I64d %I64d %d",&A,&B,&n); init(n); printf("Case #%d: %I64d\n",kase,cal(B)-cal(A-1)); } }
相关文章推荐
- Light OJ 1157 LCS Revisited (DP)
- 算法-分治法(精简)
- ListView之BaseAdapter的基本使用以及ViewHolder模式
- IOS学习之——懒加载代码
- 简单游戏设计
- 本地储存NSUserDefaults
- easyui 输入框校验 限制字体长度,以及类型。。。
- android事件分发,拦截,处理
- Git使用点滴记录
- BufferedReader替代BufferedInputStream
- nctf-密码
- C++ eof
- Swift 2.0 异步网络请求从网页获取json,并转化为NSArray,遍历得到其中数据.
- Imageloader的设置
- php ajax dom---动态增加
- Thread详解10:用管道进行线程间通信
- sqlite manager serial number
- 大型网站存储瓶颈(广义水平拆分)
- 后端开发学习书籍
- 创建线程函数区别CreateThraed/_beginthreadex/AfxBeginThread(重点理解)