zoukankan      html  css  js  c++  java
  • LightOJ 1161

    **题意:**给你n个数[4,10000],问在其中任意选四个其GCD值为1的情况有几种。 **思路:**GCD为1的情况很简单 即各个数没有相同的质因数,所以求所有出现过的质因数次数再容斥一下…… 很可惜是错的,因为完全有可能某四个数有两个公共质因数,所以还是使用普通的因子分解
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #include <algorithm>
    #include <utility>
    #include <vector>
    #include <map>
    #include <set>
    #include <string>
    #include <stack>
    #include <queue>
    #define LL long long
    #define MMF(x) memset((x),0,sizeof(x))
    #define MMI(x) memset((x), INF, sizeof(x))
    using namespace std;

    const int INF = 0x3f3f3f3f;
    const int N = 1e4+20;

    LL mar[N];
    LL ans[N];
    LL C4(LL n)//组合数4的函数
    {
    return n*(n-1)*(n-2)*(n-3)/24;
    }
    void rec(int n)//分解因子 并记录个数
    {
    for(int i = 1; i*i <= n; i++)
    {
    if(n % i == 0)
    {
    mar[i]++;
    if(n / i != i)
    mar[n/i]++;
    }
    }
    }

    int main()
    {
    // prime();
    int T;
    int cnt = 0;
    cin >> T;
    while(T--)
    {
    int n;
    scanf("%d", &n);
    MMF(mar);
    for(int i = 0; i < n; i++)
    {
    int t;
    scanf("%d", &t);
    rec(t);
    }
    for (int i = 10000; i >= 1; --i) {
    ans[i] = C4(mar[i]);
    for (int j = 2 * i; j <= 10000; j += i)
    {
    ans[i] -= ans[j];
    }
    }
    printf("Case %d: %lld ", ++cnt, ans[1]);
    }
    return 0;
    }
    //刚开始想找质因数排列组合 WA后一想 可能存在这种情况:某4个数的 相同质因数 有两种,这样后的容斥情况重复了
  • 相关阅读:
    dll-IL-metadata-反射
    Linux(Ubuntu)下安装Angular2
    在nodejs中使用input file批量上传文件的方法
    jq动态添加的元素触发绑定事件无效
    简单的在线计算器
    不同方法实现按钮背景图片的变换
    unity特殊文件夹
    《暗黑战神》随堂笔记
    《打砖块》教程知识梳理
    unity零散小知识
  • 原文地址:https://www.cnblogs.com/Yumesenya/p/6008184.html
Copyright © 2011-2022 走看看