Prime Independence LightOJ - 1356(质因子分解+最大点独立集)

从零部署Stable Diffusion:本地环境搭建完整教程 本文专为“想自己跑Stable Diffusion但完全没经验”的新手设计,覆盖从硬件准备到生成第一张图的完整流程。不涉及复杂算法原理,但会讲清每个操作的“为什么”(比如为什么需要显卡?为什么要装CUDA?),帮你知其然更知其所以然。先检查硬件是否达标(显卡是核心!安装必要软件(操作系统、Python、CUDA)下载Stable Diffusion核心代码和模型解决常见报错,生成第一张图附赠模型库推荐和性能优化技巧显卡是核心:N卡+足够显存(至少6G)是本地部署的基础。CUDA是翻译。 阅读详情

Prime Independence

LightOJ - 1356

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. And for example, {2, 8, 17} is prime independent but {2, 8, 16} or {3, 6} are not.

Now, given a set of distinct positive integers, calculate the largest prime independent subset.


Input

Input starts with an integer T (≤ 20), denoting the number of test cases.

Each case starts with an integer N (1 ≤ N ≤ 40000) denoting the size of the set. Next line contains N integers separated by a single space. Each of these N integers are distinct and between 1 and 500000 inclusive.

Output

For each case, print the case number and the size of the largest prime independent subset.

Sample Input

3

5

2 4 8 16 32

5

2 3 4 6 9

3

1 2 3

Sample Output

Case 1: 3

Case 2: 3

Case 3: 2

Note

1.      An integer is said to be a prime if it's divisible by exactly two distinct integers. First few prime numbers are 2, 3, 5, 7, 11, 13, ...

2.      Dataset is huge, use faster I/O methods.

原博客地址 点击打开链接

限制:若a % b == 0 && a / b = k其中k是质数,则a和b不能同时存在于一个集合。

题意:给你n个数,让你求出满足上面限制的最大集合,输出元素个数。



思路:根据每个数质因子个数的奇偶性建立二分图,构好图。跑HK吧,匈牙利没敢写,甚至我HK都没敢用vector。


建图:不能二层for循环遍历建图,O(n*n)的建图复杂度承受不起。可以求出每个数a[i]的所有质因子p[],判断a[i] / p[]是否存在,然后根据奇偶性建图。这样建图时间复杂度最坏也就是O(n*10),然后加上HK,总时间复杂度

O(sqrt(n) * m + n * 10)。

code:

    #include <cstdio>  
    #include <cstring>  
    #include <algorithm>  
    #include <vector>  
    #include <queue>  
    #define MAXN 40000+10  
    #define MAXM 1000000+10  
    #define INF 0x3f3f3f3f  
    #define debug printf("1\n");  
    using namespace std;  
    struct Edge{  
        int to, next;  
    };  
    Edge edge[MAXM];  
    int head[MAXN], edgenum;  
    int P[500010], num[500010];//记录每个数是否是质数 记录每个数里面质因子的个数  
    int a[MAXN];  
    int id[MAXN];  
    int oddnum, evennum;  
    void getP()  
    {  
        memset(P, 0, sizeof(P));  
        for(int i = 2; i <= 500000; i++)  
        {  
            if(P[i]) continue;  
            for(int j = 2*i; j <= 500000; j+=i)  
                P[j] = 1;  
        }  
        P[1] = 1;  
    }  
    //vector<int> p[500000+10];  
    void getPsum()  
    {  
        for(int j = 1; j <= 500000; j++)  
        {  
            int cnt = 0;  
            int n = j;  
            for(int i = 2; i * i <= n; i++)  
            {  
                if(n % i == 0)  
                {  
                    while(n % i == 0)  
                    {  
                        cnt++;  
                        n /= i;  
                    }  
                }  
            }  
            if(n > 1)  
                cnt++;  
            num[j] = cnt;  
        }  
    }  
    void init(){  
        edgenum = 0;  
        memset(head, -1, sizeof(head));  
    }  
    void addEdge(int u, int v)  
    {  
        Edge E1 = {v, head[u]};  
        edge[edgenum] = E1;  
        head[u] = edgenum++;  
    }  
    int n;  
    int vis[500010];  
    int p[30], top;  
    void getprime(int n)  
    {  
        top = 0;  
        for(int i = 2; i * i <= n; i++)  
        {  
            if(n % i == 0)  
            {  
                p[top++] = i;  
                while(n % i == 0)  
                    n /= i;  
            }  
        }  
        if(n > 1)  
            p[top++] = n;  
    }  
    void getMap()  
    {  
        scanf("%d", &n);  
        oddnum = evennum = 0;  
        memset(vis, 0, sizeof(vis));  
        for(int i = 1; i <= n; i++)  
        {  
            scanf("%d", &a[i]);  
            vis[a[i]] = i;//标记该元素 已经出现过  
            if(num[a[i]] & 1)  
                id[i] = ++oddnum;  
            else  
                id[i] = ++evennum;  
        }  
        init();  
        for(int i = 1; i <= n; i++)  
        {  
            getprime(a[i]);//处理质因子  
            for(int j = 0; j < top; j++)  
            {  
                int goal = a[i] / p[j];  
                int index = vis[goal];  
                if(index)//存在  
                {  
                    if(num[a[i]] & 1 && num[a[index]] % 2 == 0)  
                        addEdge(id[i], id[index]);  
                    else if(num[a[i]] % 2 == 0 && num[a[index]] & 1)  
                        addEdge(id[index], id[i]);  
                }  
            }  
        }  
    }  
    bool used[MAXN];  
    int dx[MAXN], dy[MAXN];  
    int mx[MAXN], my[MAXN];  
    int DFS(int u)  
    {  
        for(int i = head[u]; i != -1; i = edge[i].next)  
        {  
            int v = edge[i].to;  
            if(!used[v] && dy[v] == dx[u] + 1)  
            {  
                used[v] = true;  
                if(my[v] == -1 || DFS(my[v]))  
                {  
                    my[v] = u; mx[u] = v;  
                    return 1;  
                }  
            }  
        }  
        return 0;  
    }  
    int kcase = 1;  
    void HK()  
    {  
        memset(mx, -1, sizeof(mx));  
        memset(my, -1, sizeof(my));  
        int ans = 0;  
        while(1)  
        {  
            bool flag = false;  
            memset(dx, 0, sizeof(dx));  
            memset(dy, 0, sizeof(dy));  
            queue<int> Q;  
            for(int i = 1; i <= oddnum; i++)  
                if(mx[i] == -1)  
                    Q.push(i);  
            while(!Q.empty())  
            {  
                int u = Q.front();  
                Q.pop();  
                for(int i = head[u]; i != -1; i = edge[i].next)  
                {  
                    int v = edge[i].to;  
                    if(!dy[v])  
                    {  
                        dy[v] = dx[u] + 1;  
                        if(my[v] == -1)  
                            flag = true;  
                        else  
                        {  
                            dx[my[v]] = dx[u] + 1;  
                            Q.push(my[v]);  
                        }  
                    }  
                }  
            }  
            if(!flag) break;  
            memset(used, false, sizeof(used));  
            for(int i = 1; i <= oddnum; i++)  
                if(mx[i] == -1)  
                    ans += DFS(i);  
        }  
        printf("Case %d: %d\n", kcase++, n - ans);  
    }  
    int main()  
    {  
        getP();  
        getPsum();  
        int t;  
        scanf("%d", &t);  
        while(t--)  
        {  
            getMap();  
            HK();  
        }  
        return 0;  
    }  


验证方法、符合性方法与设计保证的关系 未来,随着适航标准和工程实践的不断演进,验证与符合性方法将持续优化,以应对日益复杂的系统设计需求。设计保证过程中的验证活动具有双重作用,既用于设计过程的质量控制和风险管理,又作为适航符合性方法的重要支持材料。在未来的航空电子系统开发中,进一步优化设计保证与验证活动的协同作用,将有助于应对日益复杂的工程挑战,推动航空安全技术的发展。为了全面理解这二者之间的关系,本章将系统说明设计保证过程中的验证活动如何既服务于设计保证,又作为符合性方法中的核心证明材料。最终,通过功能测试和环境测试验证硬件的实际性能。 阅读详情

相关推荐

个人整理的数据集(手写中文数据、发票数据、快递单数据、车牌数据)

本人在工作生活中收集了各个方面比较多的真实的数据集如下: 一、手写中文数据集 1、档案类数据: 此数据集为手写档案数据,数量较大,大约128G,图像均未标注。 ex: 2、手写作文数据: 此数据集为手写作文数据,是大约800M左右,图像按行提供位置和内容标注,十分珍贵。 ex: 二、发票数据集: 1、增值税发票 此数据集包含了大量真实的增值税发票数据,大约9G,标注了发票位置数据,未提供详细标注。 ex: 2、购车发票 此数据集未提供标注。

weixin_43143224的博客 5872

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

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

weixin_45630722的博客 302

VS2015+C++实战:手把手教你用海康MVS里的Demo搞定多相机同步采图与保存

本文详细解析了在VS2015+C++环境下,利用海康威视MVS工业相机SDK实现多相机同步采图与保存的全流程。从环境准备、SDK选择到多相机初始化、同步采图方案,再到异常处理与性能优化,提供了实战技巧和代码示例,帮助开发者快速掌握工业相机二次开发的核心技术。

weixin_29170327的博客 280

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

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

这里是阿安的博客 688

SAP 人力资源工资配置项3---工资项配置

工资项设置

xiouluoyang的专栏 1万+

Ubuntu 22.04 “软件与更新”装了NVIDIA驱动,WiFi等设备不见了

在Win10装了Ubuntu22.04的双系统,台式机里面有NVIDIA 3080Ti的独立显卡,Ubuntu默认使用的nouveau驱动,需要更换成NVIDIA相应的驱动,在软件和更新里面一键安装了NVIDIA-driver-535-server之后,发现wifi、蓝牙等设备消失了。这个问题的根源据说跟这个nouveau驱动有关,希望linux社区可以解决这个问题。命令安装后 sudo reboot就可以重新看到WiFi以及蓝牙等设备图标了。然后用U盘拷贝到不能上网的Ubuntu22.04系统上,利用。

me_ysd的博客 5852

LightOJ-1356 Prime Independence

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

MyWorld 1521

【异常】Nacos 2.x 核心报错:Server check fail (gRPC 端口连不通) 深度排查

如果 Nacos 运行在 K8s 中,需确保对应的Servicemetadata:spec:ports:port: 8848port: 9848 # 必须暴露此端口selector:app: nacos在 Nacos 2.x 时代,“端口成套出现”是基础设施配置的基本要求。遇到连接失败时,首要检查的不是业务配置,而是网络链路上主端口 + 1000的 TCP 通讯是否被放行。更多关于 AI + 教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 324

Prime Independence LightOJ - 1356(二分图匹配+最大独立集)

题目链接:qaq   题意:给你一堆数,让你找出最大一组数里面不存在一个整数是另一个整数的素数倍,输出最大数量。   思路:将数按质因子的数量奇偶分边(奇奇,偶偶的两个数都不会是素数的倍数),然后将素数倍两个整数=连边。最后就是求最大独立集的方法了   附上代码: #include&lt;cstdio&gt; #include&lt;cstring&gt; #include&lt;...

liexss的博客 598

做cellchat画图时自环的角度颠倒,如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 462

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

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

S7-200 SMART PLC 子程序功能块(阀门控制)

由于S7-200 SMARTPLC的子程序种种功能、容量限制,有时想实现多次调用的子程序可能并不是太容易,这篇博客还是给出一些推荐写法,供大家参看。

RXXW_Dor的博客 8064

LightOJ 1356. Prime Independence

链接 http://lightoj.com/volume_showproblem.php?problem=1356 题意 给出 nnn 个数,找出一个最大质数独立子集,如果 a=b∗a=b*a=b∗ 一个质数,那么认为 aaa 是 bbb 的一个质数乘级,如果一个集合不存在一个数是另一个数的质数乘级,那么这就是质数独立子集 思路 本题难点在于二分图建图 记 totitot_itoti​ 为 iii 的质因子个数,p1,p2,p3p_1,p_2,p_3p1​,p2​,p3​ 为质数 若 a∗p1=b∗p2=c

c4Lnn 的 优快云 博客 354

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

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

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

嗯。 1754

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Prime Independence LightOJ - 1356(kuangbin专题14 数论专题) 质因数分解 + 二分图最大匹配(最大流 || HK...)

Prime Independence LightOJ - 1356 题意: 给你一个数的集合。 问你是否可以找到一个集合,使得里面的元素互质 or 相除的商不是质数(大数除以小数)。 思路: 可以根据一个数的质因子,来划分成两个集合。 从而把问题转换成二分图最大匹配。 分为含有 奇数个质因子 和 含有偶数个质因子。 可以发现,两边集合,当相差一个质因子时,正好不满足条件。所以连一条边。 先从大到小 sort一遍。 之后把每个数x质因子分解。 x可以和y连边当且仅当两者相差一个质因子。 所以由上,

qq_45377553的博客 184

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

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

MyWorld 1481

LightOJ - 1356 Prime Independence(二分图最大独立集+质因数分解)

传送门 题目大意 给出一个序列,选出一个最大的集合,使得这个集合中的任意两个数,都不存在素数倍关系。一对数x,yx,yx,y有素数倍关系,即x=p∗y(y=p∗x)x=p*y(y=p*x)x=p∗y(y=p∗x)。 解题思路 两个数有素数倍关系,那么这个质数ppp有很多取值的可能,而且即使找到给出序列中所有的关系,正常思路也无从下手… 使用二分图去求解这样的给定限制的集合,这个思路真的很神奇。为什么能构成二分图——从质因数的奇偶性下手!不难知道一个数如果乘上一个素数后,那么它的质因数个数的奇偶性一定发生变

Happig的博客 279

Prime Independence LightOJ - 1356

HK+质因子分解 HK是二分图匹配中匈牙利算法的优化,时间复杂度O(sqrt(n)*m) 先通过bfs寻找多条增广路,记下每个点到源点的距离(类似于网络流dinic算法),然后用类似于匈牙利算法中dfs的方法,进行匹配。 要求图是二分的,并且根据增广路的特性 模板: #include<bits/stdc++.h> #define ll long long using namespace...

weixin_43184669的博客 191

LightOJ-1356 Prime Independence 质因子分解+二分图最大独立集

感觉这道题挺好的,数论+图论。就是我太菜了,怎么都写不对啊啊啊55555... 先一搜题目,发现这道题用质因子分解+二分图最大独立集,好巧妙啊_(:з」∠)_  二分图最大独立集=顶点数-最大匹配数(用Hopcroft-Carp算法,匈牙利算法会TLE...) 然后自己琢磨出如下思路:(用到了“拆点”) 但是仍然TLE了QAQ...附上TLE的代码: #include&lt;cstdio...

A confused programmer 480

Prime Independence LightOJ - 1356 (二分图+HK算法)

建图:奇数个质因子的数一边,偶数个质因子的一边,值相差一个质因子的两个点连线 HK:匈牙利的优化版,套模板,讲解在代码里,从各个博客上拼起来的 #include<iostream> #include<cstring> #include<string> #include<cstdio> #include<vector> #include&l...

仰望蓝天的博客 244

LightOJ - 1356 Prime Independence(质因数分解+二分图的最大匹配)

LightOJ - 1356 Prime Independence匈牙利算法#include<cstdio> #include<cstring> #include<cmath> #include<vector> using namespace std; /* 求二分图的最大独立集 邻接表存图 匈牙利算法得到最大匹配(或最小顶点覆盖)hungary() V-hungary()=最大独立集 */ con

zhuxi的博客 350

Lightoj-1356 Prime Independence(质因子分解)(Hopcroft-Karp优化的最大匹配)

题意: 找出一个集合中的最大独立集,任意两数字之间不能是素数倍数的关系。 思路: 最大独立集,必然是二分图。 最大数字50w,考虑对每个数质因子分解,然后枚举所有除去一个质因子后的数是否存在,存在则建边,考虑到能这样建边的数一定是质因子个数奇偶不同,所以相当于按奇偶区分建立了二分图,然后求二分图最大匹配,得到最大独立集就行了。 有一点这个题数据比较大,直接匈牙利炸了,要Hopcroft-...

weixin_34319817的博客 103

LightOJ - 1356 Prime Independence (二分图 最大独立集 素数打表)

题意: 给你一个集合,让你从这个集合中挑选出几个数,使得这几个数中任意两个数相除后的值不能为素数 即挑选出来的这几个数不能互相冲突 最大独立集 = 所有点数 - 最大匹配数 呵。。呵。。。原先用的二维数组来标记 呵。。呵。。。。呵。。呵。。ER。。。MLE vector 大法好! orz mmp。。。。。呸。。。吐槽完毕。。。。 因为a = b * k (k为质数) 所以a必...

weixin_30538029的博客 62

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 its member is a prime...

shyoldman的博客 532
上一篇: Tic-Tac-Toe (模拟)
下一篇: Aladdin and the Flying Carpet LightOJ - 1341(算数基本定理)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值