【HDU】4135 Co-prime 容斥原理
来源:互联网 发布:淘宝欧时力旗舰店真假 编辑:程序博客网 时间:2024/05/22 03:27
传送门:【HDU】4135 Co-prime
题目分析:sqrt(n)的时间内找到n的所有质因数然后用容斥原理加加减减即可。
代码如下:
#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>using namespace std ;#define REP( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i )#define FOR( i , a , b ) for ( int i = ( a ) ; i <= ( b ) ; ++ i )#define REV( i , a , b ) for ( int i = ( a ) ; i >= ( b ) ; -- i )#define CLR( a , x ) memset ( a , x , sizeof a )typedef long long LL ;const int MAXN = 15 ;int S[MAXN] , top ;int n ;LL A , B ;void solve () {scanf ( "%I64d%I64d%d" , &A , &B , &n ) ;top = 0 ;int sqr = sqrt ( ( double ) n ) ;FOR ( i , 2 , sqr ) {if ( n % i == 0 ) {S[top ++] = i ;while ( n % i == 0 ) n /= i ;if ( n == 1 ) break ;sqr = sqrt ( ( double ) n ) ;}}if ( n > 1 ) S[top ++] = n ;int tot = 1 << top ;LL ans = B - A + 1 ;REP ( i , 1 , tot ) {int cnt = 0 ;LL tmp = 1 ;REP ( j , 0 , top ) {if ( i & ( 1 << j ) ) {tmp *= S[j] ;++ cnt ;}}if ( cnt & 1 ) ans -= B / tmp - ( A - 1 ) / tmp ;else ans += B / tmp - ( A - 1 ) / tmp ;}printf ( "%I64d\n" , ans ) ;}int main () {int T , cas = 0 ;scanf ( "%d" , &T ) ;while ( T -- ) {printf ( "Case #%d: " , ++ cas ) ;solve () ;}return 0 ;}
0 0
- [容斥原理] hdu 4135 Co-prime
- 【HDU】4135 Co-prime 容斥原理
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime 容斥原理
- hdu 4135 Co-prime【容斥原理】
- hdu 4135 Co-prime (容斥原理)
- 【容斥原理】HDU 4135 Co-prime
- HDU 4135 Co-prime (容斥原理)
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime 容斥原理
- hdu 4135 Co-prime 容斥原理
- HDU 4135 Co-prime(容斥原理)
- HDU 4135 Co-prime(容斥原理)
- HDU 4135 Co-prime 容斥原理
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime(容斥原理)
- [HDU 4135]Co-prime:容斥原理
- 容斥原理:HDU-4135Co-prime
- hdu 1069
- gcc 头文件查找路径
- chapter7 指针与引用
- unity3d从零开始(四):了解Script
- LeetCode-Validate Binary Search Tree
- 【HDU】4135 Co-prime 容斥原理
- strcpy 与 自己 赋值的 区别 (new)
- Matlab实例学习-----------格式化文本 读 操作
- 题目1190:大整数排序
- W.Richard Stevens 先生所著之书比较适合有经验的人进一步深入学习
- ARM9五级流水线
- 如何在push一个视图控制器时隐藏掉自定义的TabBar
- UINavigationBar的简单使用
- 面试必须要懂的函数