Prime Independence(LightOJ - 1356,线性筛 + 最大独立集)

【ESD专题】从原理上分析TVS管PCB Layout的经验法则 我们常常会听到的一些经验法则,按这些经验法则去做,一般也不会有什么问题,但是到底是为什么呢? 没有从原理上分析和证明的时候,往往在Layout之后还要担心实际测试结果怎么样。或是在实际测试出问题后,根本无法进行分析,难道说修改一个版本就好了?那要从哪里修改呢?也无从下手呀。... 阅读详情

一.题目链接

\quad Prime Independence

二.题目大意

\quad 给 n n n 个数, A A A 被称为 B B B 的素倍数当前仅当 A = B × P A = B \times P A=B×P( P P P 为素数)

\quad 定义最大独立集为最多能选出多少个数,使得选出的数两两之间不存在素倍数关系.

\quad 求最大独立集.

\quad 1 ≤ N ≤ 1 0 4 , 1 ≤ e ≤ 5 × 1 0 5 1 \leq N \leq 10^4, 1 \leq e \leq 5 \times 10^5 1≤N≤104,1≤e≤5×105 且 e e e 两两不同.

三.分析

\quad 图论、数论两开花ヾ(✿゚▽゚)ノ

四.代码实现

#include <bits/stdc++.h>
using namespace std;

namespace Graph
{
    const int M = (int)8e4;
    const int N = (int)1e5;
    const int inf = 0x3f3f3f3f;

    int n, m, S, T, cnt;
    int head[M + 5];

    struct node
    {
        int v, w, nx;
    }Edge[N * 2 + 5];

    int d[M + 5];
    int cur[M + 5];
    int q[M + 5], l, r;

    void init()
    {
        cnt = 0;
        for(int i = 0; i <= n; ++i)
        {
            head[i] = -1;
        }
    }

    void add(int u, int v, int w)
    {
        Edge[cnt].v = v;
        Edge[cnt].w = w;
        Edge[cnt].nx = head[u];
        head[u] = cnt++;
    }

    bool bfs()
    {
        l = 1, r = 0;
        for(int i = 1; i <= n; ++i) d[i] = -1;
        q[++r] = S, d[S] = 0, cur[S] = head[S];
        while(l <= r)
        {
            int u = q[l++];
            if(u == T) return 1;
            for(int i = head[u]; ~i; i = Edge[i].nx)
            {
                int v = Edge[i].v;
                if(d[v] == -1 && Edge[i].w)
                {
                    d[v] = d[u] + 1;
                    cur[v] = head[v];
                    q[++r] = v;
                }
            }
        }
        return 0;
    }

    int dfs(int u, int limit)
    {
        if(u == T) return limit;
        int flow = 0;
        for(int i = cur[u]; ~i && flow < limit; i = Edge[i].nx)
        {
            cur[u] = i;
            int v = Edge[i].v;
            if(d[v] == d[u] + 1 && Edge[i].w)
            {
                int t = dfs(v, min(Edge[i].w, limit - flow));
                if(!t) d[v] = -1;
                Edge[i].w -= t, Edge[i^1].w += t, flow += t;
            }
        }
        return flow;
    }

    int Dinic()
    {
        int r = 0, flow;
        while(bfs()) while(flow = dfs(S, inf)) r += flow;
        return r;
    }
};

namespace Math
{
    const int M = (int)5e5;

    bool is_prime[M + 5];
    int prime[M + 5], cnt;
    int v[M + 5];//最小质因子

    void init()
    {
        memset(is_prime, 1, sizeof(is_prime));
        is_prime[0] = is_prime[1] = 0;
        for(int i = 2; i <= M; ++i)
        {
            if(is_prime[i])
            {
                prime[++cnt] = i;
                v[i] = i;
            }
            for(int j = 1; j <= cnt && i * prime[j] <= M; ++j)
            {
                is_prime[i * prime[j]] = 0;
                v[i * prime[j]] = prime[j];
                if(i % prime[j] == 0)
                {
                    break;
                }
            }
        }
    }
};

typedef long long ll;

const int M = (int)4e4;
const int N = (int)4e4;
const int inf = 0x3f3f3f3f;
const ll mod = (ll)1e9 + 7;
const double eps = 1e-9;

int n, a[M + 5];
int n1, l[M + 5];
int n2, r[M + 5];
int fac[M + 5][10];
int len[M + 5];

int cal(int p)
{
    len[p] = 0;
    int x = a[p], c = 0;
    while(x > 1)
    {
        fac[p][++len[p]] = Math::v[x];
        x /= Math::v[x];
        ++c;
    }
    sort(fac[p] + 1, fac[p] + len[p] + 1);
    len[p] = unique(fac[p] + 1, fac[p] + len[p] + 1) - (fac[p] + 1);
    return c;
}

int bsl(int x)
{
    int L = 1, R = n1 + 1, mid;
    while(L < R)
    {
        mid = (L + R) >> 1;
        if(a[l[mid]] >= x) R = mid;
        else               L = mid + 1;
    }
    return R;
}

int bsr(int x)
{
    int L = 1, R = n2 + 1, mid;
    while(L < R)
    {
        mid = (L + R) >> 1;
        if(a[r[mid]] >= x) R = mid;
        else               L = mid + 1;
    }
    return R;
}

int main()
{
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);
    Math::init();
    int T; scanf("%d", &T);
    for(int ca = 1; ca <= T; ++ca)
    {
        scanf("%d", &n); n1 = n2 = 0;
        for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
        sort(a + 1, a + n + 1);
        for(int i = 1, c; i <= n; ++i)
        {
            c = cal(i);
            if(c & 1) l[++n1] = i;
            else      r[++n2] = i;
        }
        Graph::n = n1 + n2 + 1; Graph::init();
        for(int i = 1, x, y, p; i <= n1; ++i)
        {
            Graph::add(0, i, 1), Graph::add(i, 0, 0);
            for(int j = 1; j <= len[l[i]]; ++j)
            {
                y = a[l[i]] / fac[l[i]][j];
                p = bsr(y);
                if(p <= n2 && a[r[p]] == y) Graph::add(i, n1 + p, 1), Graph::add(n1 + p, i, 0);
            }
        }
        for(int i = 1, x, y, p; i <= n2; ++i)
        {
            Graph::add(n1 + i, n1 + n2 + 1, 1), Graph::add(n1 + n2 + 1, n1 + i, 0);
            for(int j = 1; j <= len[r[i]]; ++j)
            {
                y = a[r[i]] / fac[r[i]][j];
                p = bsl(y);
                if(p <= n1 && a[l[p]] == y) Graph::add(p, n1 + i, 1), Graph::add(n1 + i, p, 0);
            }
        }
        Graph::S = 0, Graph::T = n1 + n2 + 1;
        printf("Case %d: %d\n", ca, n1 + n2 - Graph::Dinic());
    }
    return 0;
}
AUTOSAR&UDS 理论要点及isolar实战-DEM模块 从这节开始,将讲解UDS诊断中非常重要的知识点:故障事件触发、故障信息上报、故障信息处理、故障信息存储和故障系统降级,后续会陆续更新。 阅读详情

相关推荐

5分钟搞懂知识抽取:如何把非结构化数据变成知识图谱的宝藏?

本文通过一个电商评论分析实战案例,详细解析了如何利用spaCy、Neo4j等工具,将非结构化文本数据转化为结构化知识图谱的完整流程。文章重点阐述了知识抽取的核心步骤,包括命名实体识别、关系抽取以及知识存储与查询,帮助读者快速掌握将数据转化为知识宝藏的关键技术。

weixin_29054245的博客 235

Prime Independence(素数+奇偶分图+最大独立集)

题目链接 题意: 给出nnn个数,在这nnn个数组成的集合中,两两之间相除不出现素数。问这个集合的最大值 SOL: 最大独立集=nnn— 二分图的最大匹配值 对于两个数,如果他们的质因子数量是相等的,那么一定能在一个集合里面。所以,建立按照数字的奇偶性,建立二分图。用匈牙利算法求二分图的最大匹配值 Code: #include<bits/stdc++.h> using namespace std; const int N = 1e6 + 10; int n; int a[N], all[N],

killer的博客 362

Qt for Android:基于libusb实现CH340x串口通信的高效开发方案

本文详细介绍了在Qt for Android环境下,基于libusb实现CH340x串口通信的高效开发方案。通过绕过Android高版本系统的权限限制,利用libusb+JNI技术实现稳定通信,适用于工业手持终端等场景。文章涵盖环境搭建、核心实现、常见问题解决方案及性能调优经验,帮助开发者快速掌握这一关键技术。

weixin_42715608的博客 427

Prime Independence(二分匹配+最大独立集+素数表)

题目链接 A set of integers is called prime independent if none of its member is a prime multiple of another member. An integer a is said to be a prime multiple of b if, a = b x k (where k is a prime [1]) ...

qq_44293044的博客 499

微信小程序一键登录和临时code用JWT进行微信用户授权

2、跨域进行调用接口时候,唯一标识UnionID和会话密钥 session_key如果还是用的我自己的,会出现无法调用微信服务器接口,就需要将唯一标识和会话密钥换成前端的,才可以,我自己认为这样很不合理,暂时还没有找到原因。2、能够获取到openId,但是也只能获取到openid,无法获取用户的相关信息,经过查阅官网发现,现在微信那边已经将用户信息加密,需要调用提供的接口进行解密然后获取用户数据,问题原因已经找到解决方法,还未即使更改。1、我这是一台电脑实现的前端调用后端接口,不用考虑跨域的问题。

qq_67653492的博客 5713

告别WSL!实测AMD ROCm7预览版在Windows下跑ComfyUI,速度提升与避坑全记录

本文详细记录了在Windows原生环境下部署AMD ROCm7+PyTorch+ComfyUI的全流程,相比WSL环境性能显著提升。涵盖硬件兼容性确认、开发环境配置、Python环境搭建、ComfyUI部署优化及性能对比测试,为AI绘图爱好者提供实用指南。

weixin_42528090的博客 671

Prime Independence质数

将质数利用二分图求解最大独立集 A set of integers is called prime independent if none of its member is a prime multiple of another member. An integer a is said to be a prime multiple of b if, a = b x k (where k is a prime [1]) So, 6 is a prime multiple of 2, but 8 is not.

qq_52358084的博客 597

Mac电脑用Latex论文排版3天速成5天实战de笔记

我后悔了,这五天竞赛搞得我视力都下降了...一个冲动的决定后成为数模竞赛论文写手,3天速成+5天时间=点亮攻克latex写论文技能💡关于Overleaf我是Mac,曾经按照大部分推荐的方式用TEXshop+vs code,但是把模板导入就开始报错。跟着少之又少的适配mac的教程(此时我已知道大概是走错路了)改了配置也无效。海鲜市场找佬改了半天,佬问我:一定要用VC吗?我说,那倒也不是。于是佬推荐我overleaf,三下五除二帮我挑配了环境,美汁汁收了我30块钱。

luwanjoyce的博客 2250

Prime Independence(质因子分解+二分图最大独立集)

Prime Independence Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1356 Description A set of integers is called prime independen

AI蜗牛之家 1611

YOLOv9原创自研:卷积魔改 | 一种新颖的风车形卷积(PConv)融合注意力机制,加强微弱小目标检测能力

为了进一步提升小目标检测能力,风车形卷积(PConv)融合注意力机制进一步提升小目标检测能力

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 362

【LLM评估篇】Ceval | GAIA | MMLU benchmarks

- 一些大模型的评估模型: - 多轮:MTBench - 关注评估:agent bench - 长文本评估:longbench,longeval - 工具调用评估:toolbench - 安全评估:cvalue,safetyprompt等 本文还介绍了其他主流的大模型评估指标等及其使用

发现问题,并解决问题,批判性思维 6947

【最大独立集】Prime Independence

Prime Independence Description A set of integers is called prime independent if none of its member is a prime multiple of another member. An integer ais said to be a prime multiple of b if

willinglive 822

【100%通过率】华为OD机试真题 Python 实现【网上商城优惠活动 / 模拟商场优惠打折II】

某网上商场举办优惠活动,发布了满减、打折、无门槛3种 优惠券,分别为: 1:每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200~299可使用2张减20元,以此类推; 2:92折券,1次限使用1张,如100元,则优惠后为92元, 3:无门槛5元优惠券,无使用数限制,直接减5元。

MISAYAONE的博客 9372

LightOJ 1356 Prime Independence(素数筛选法+最大独立集)(Hopcroft-Carp算法)

Prime Independence 解题思路: 题目大意: 定义素数独立集为一个整数集(不一定全是素数),该整数集合中的任意两个a和b,如果存在a=b*prime的情况(prime为素数),则视为 该情况为"冲突"。独立集即不存在冲突的集合。 算法思想: 首先看到独立集就应该想到二分图,既然是二分图,每个数为一个结点,哪些是U哪些是V呢?自然而然地每个数num进行素因数分 解,

piaocoder 1704

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【刷题记录】 LightOJ-1356 Prime Independence 数论+最大独立集

给出n个数字的集合,让你求一个子集,使得自己内任意两个数之间不是素数倍数关系,求这样的最大的子集大小。

这里是阿安的博客 689

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Prime Independence (数论)

Prime Independence 题目链接 大致题意: 对于给定集合,求解最大的子集合,使得集合内两两之商不为质数 解题思路: 求最大独立集,考虑如何建二分图 每个数要么是奇数个素数乘级,要么是偶数个素数乘级,将奇数个素数乘级与偶数个素数乘级连线建图 匈牙利算法有些优化,不然会被T AC代码: #include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6 + 10; int n; v

qq_49494204的博客 433

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LightOJ1356 Prime Independence(数论+匹配)

LightOJ1356题目给出n个数, 现在要选出一个”素数独立集合”, 如果一个数是另外一个数的素数倍, 这两个不能同时选入,问这个集合的最大大小是多少?思路http://tokers.cn/2015/07/11/lightoj1356-prime-independence%E6%95%B0%E8%AE%BA%E5%8C%B9%E9%85%8D/ 知道了Hopcroft-Karp算法,用二分图来

天道酬勤 585

Lightoj-1356 Prime Independence(质因子分解&&二分图最大独立集)

题目: http://lightoj.com/volume_showproblem.php?problem=1356 题意: 找出一个集合中的最大独立集,任意两数字之间不能是素数倍数的关系。 思路: 最大独立集,必然是二分图。 最大数字50w,考虑对每个数质因子分解,然后枚举所有除去一个质因子后的数是否存在,存在则建边,考虑到能这样建边的数一定是质因子个数奇偶不同,所以相当于按

MyWorld 1482

B - Prime Independence (二分图最大匹配+因子分解)

B - Prime Independence 1356 - Prime Independence   PDF (English)StatisticsForumTime Limit: 3 second(s)Memory Limit: 32 MBA set of integers is called prime independent if none of its member is a prime ...

howell 641

Prime Independence

题意: 对于给定集合,求解最大的子集合,使得集合内两两之商不为质数。 解法: 考虑对于每一个数字分解质因数可以得到 $O(nloglogNUM)$ 条两个数字不可以出现在同一集合的信息。 同时发现一条代表冲突的边必然是联结一个由奇数个质数连乘构成的数字和一个由偶数个质数连乘构成的数字。 是一个二分图,考虑最大独立集即可。 #include <bits/stdc...

weixin_30496431的博客 274

LightOJ-1356 Prime Independence

题意: 找出一些数字的最大质独立集,就是集合能的所有数互相之间不会出现 a[i]==t*a[j] (t是质数) 的情况。 思路: 首先想最大独立集对于一般图是NP问题,通常只有求二分图最大独立集,然后就是如何把这些数字分为二分图。 能够想到如果一个数字等于另一个数字乘以一个质数,那么这两个数字的质因子分解应该只有这一个质数的差别。也就是只会多一个质数,数字上限只有500000,完全可以

MyWorld 1521

lightoj 1356 - Prime Independence 【质因子分解 奇偶构图 + HK优化】

1356 - Prime Independence PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 MB A set of integers is called prime independent if none of

世界很大 1552

二分图HK算法[数论+二分图最大独立集]:Lightoj1356

Prime Independence LightOJ - 1356 题目大意:给你n个数,你从这个集合中挑选出若干个数,使得这个集合的数里面两两之间a/b!=k[k是质数并且a>b] 解题思路:如果a/b是一个质数那么a的质因数分解之后质数的总共个数如果是奇数那么b分解质因数后质因子个数就是偶数个,反之亦然。那么我们就可以将质因子个数为奇数和偶数的两个点 ...

weixin_45630722的博客 302

LightOJ 1356 Prime Independence (素数 二分图)

Prime Independence Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1356 Description A set of integers is called prime independ

To be what you what to be! 2469

Light OJ 1356 Prime Independence 最大独立集+素数筛选

题目来源:Light OJ 1356 Prime Independence 题意:给你n个数 选出最多的数构成一个集合使得任何2个数不是另外一个数的质数倍 x!=k*y  思路:矛盾的2个数连边 并且所有数分成质因子数为奇数和偶数两部分 以质因子奇偶不同构建二分图 同奇 同偶的数一定不是另外一个数的质数倍 判断矛盾 首先对每个数因子分解 例如x 有a1个p1质因子 a2个p2质因子...an

嗯。 1754

LightOJ - 1259(素数筛)

链接:https://vjudge.net/contest/288256#problem/F #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int sz = 1e7+1; int prime...

dukig的博客 194
上一篇: Sub Matrix Sum(UCF Local Programming Contest 2019(Practice),二分单调栈)
下一篇: 牛客练习赛68 A B C D
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值