ZOJ 2836 Number Puzzle (容斥原理)
2015-04-18 21:05
225 查看
理解的好辛苦啊,,ym final爷,几分钟就能A出来!! 二进制真是好东西啊
#include "string" #include "iostream" #include "cstdio" #include "cmath" #include "set" #include "queue" #include "vector" #include "cctype" #include "sstream" #include "cstdlib" #include "cstring" #include "stack" #include "ctime" #include "algorithm" #define pa pair<int,int> #define Pi M_PI #define INF 0x3f3f3f3f #define INFL 0x3f3f3f3f3f3f3f3fLL using namespace std; typedef long long LL; const int M=15; int m, n, A[M]; LL gcd( LL a, LL b ) { return b == 0 ? a : gcd( b, a % b ); } LL lcm( LL a, LL b ) { return a / gcd( a, b ) * b; } void solve() { LL ans = 0; for( int i = 1; i < ( 1 << n ); ++i )//用二进制来1,0来表示第几个素因子是否被用到, //如n=3,三个因子是2,3,5,则i=3时二进制是011,表示第2、3个因子被用到 { LL mult = 1; LL bits = 0; for( int j = 0; j < n; ++j ) { if( ( 1 << j ) & i ) //判断第几个因子目前被用到 { mult = lcm( mult, A[j] ); bits++; } } if( bits & 1 )//容斥原理,奇加偶减 ans += m / mult; else ans -= m / mult; } printf( "%lld\n", ans ); } void Orz() { while( ~scanf( "%d %d", &n, &m ) ) { for( int i = 0; i < n; ++i ) scanf( "%d", &A[i] ); solve(); } } int main() { Orz(); return 0; }
相关文章推荐
- ZOJ 2836 Number Puzzle(容斥原理)
- [容斥原理] zoj 2836 Number Puzzle
- ZOJ 2836 Number Puzzle(容斥原理啊)
- ZOJ 2836 Number Puzzle(容斥原理)
- zoj 2836 Number Puzzle(容斥原理)
- ZOJ2836-Number Puzzle-容斥原理
- ZOJ 2836 Number Puzzle
- ZOJ2836 容斥原理
- ZOJ 2836 容斥原理
- zoj 2836 Number Puzzle(容斥,求1到m有多少个数能被数组里任意一个整除)
- ZOJ 2836 Number Puzzle (容斥)
- [ZOJ 2836] Number Puzzle
- 【ZOJ】2836 Number Puzzle
- zoj 2836 容斥原理
- ZOJ 2836 Number Puzzle
- ZOJ 1442 Dinner Is Ready 容斥原理 + java大数
- ACM学习历程—ZOJ 3868 GCD Expectation(莫比乌斯 || 容斥原理)
- zoj 3556 How Many Sets I 解题报告 <容斥原理>
- zoj 3547(容斥原理)
- ZOJ 3233 Lucky Number --容斥原理