zoukankan      html  css  js  c++  java
  • HDU 1796 How many integers can you find(容斥)题解

    思路:二进制解决容斥问题,就和昨天做的差不多。但是这里题目给的因子不是质因子,所以我们求多个因子相乘时要算最小公倍数。题目所给的因数为非负数,故可能有0,如果因子为0就要删除。

    代码:

    #include<set>
    #include<map>
    #include<cmath>
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define ll long long
    using namespace std;
    const int maxn = 20000 + 10;
    const int seed = 131;
    const int MOD = 9901;
    const int INF = 0x3f3f3f3f;
    ll a[100];
    ll n, m;
    ll gcd(ll aa, ll b){
        return b == 0? aa : gcd(b, aa % b);
    }
    ll solve(){
        ll ans = 0;
        for(ll i = 1; i < (1 << m); i++){
            int num = 0;
            ll val = 1;
            for(int j = 0; j < m; j++){
                if(i & (1 << j)){
                    val = val / gcd(val, a[j]) * a[j];
                    num++;
                }
            }
            if(num & 1){
                ans += n / val;
            }
            else{
                ans -= n / val;
            }
        }
        return ans;
    }
    int main(){
        while(~scanf("%lld%lld", &n, &m)){
            n--;
            for(int i = 0; i < m; i++){
                scanf("%lld", &a[i]);
                if(a[i] == 0){
                    i--;
                    m--;
                }
            }
            printf("%lld
    ", solve());
        }
        return 0;
    }
  • 相关阅读:
    特征值分解与奇异值分解的相关学习记录
    week9:Recommender Systems
    关于PCA的一些学习汇总
    第四周疑难点
    第二章感知机习题
    Week7:SVM难点记录
    week6:Diagnosing Bias vs. Variance难点记录
    laravel ajax表格删除
    dropzone
    laravel 部分路由取消csrf
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9565248.html
Copyright © 2011-2022 走看看