本题需要在一个按照“纯元数”规则建成的无向图中,找出节点数最多的连通分量,并对每个这样的连通分量求最小生成树,最终输出这些最小生成树权值和的最小值。具体步骤如下:
预处理素数(纯元数)
由于数组元素 ai≤106,任意两数之和最大为 2×106。使用线性筛或埃氏筛预处理区间 [0,2×106+1] 内的所有素数,标记数组 is_prime。
构建连通分量并统计大小
给定 n 个整数 a1,a2,…,an。若两个下标 ieqj 满足 ai+aj 是“纯元数”,则在 i 与 j 之间连一条无向边,边权为 ai+aj。这里一个正整数被称为纯元数,当且仅当它大于 1 且除 1 和自身外没有其他正因子。
图中所有边均按上述规则生成,图可能由多个连通分量构成。现只考虑点数(即包含的节点数目)最多的连通分量:若这样的连通分量有多个,则对每一个都分别求一棵连通树,使得在该连通分量内所有节点连通且无环,并希望所选边的权值总和尽可能小。你需要输出这些连通分量各自的最小边权和中的最小值。保证每个连通分量都存在至少一棵连通树。
数据范围:n 不超过 10^3,每个 ai 均为整数且满足 0≤ai≤106。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.