题目链接

题目大意:
题目首先介绍了素数的概念。
然后说1既不是素数又不是合数
一个合数v,如果v的素数因子小于等于合数因子,那么称v是强复合的!
现在给你一个n个长度的数组a,要求找出最长的数组b,满足以下要求:
1.a中所有元素相乘等于b中的元素相乘
2.b中的元素要大于1且是强复合的
3.数组b的长度k要尽可能的大
每组样例给出n和数组a,输出k的值,如果没有满足要求的数组b,输出0

官方题解:

解析官方题解!

首先利用唯一因子分解定理可以知道一个数的正因子个数为D
D=(d1+1)(d2+1)…(dm+1)
那么如果其中素数因子个数为m,那么合数因子个数为D-m-1(1既不是合数也不是素数!)
接着按照强复合数的定义,可得到2m+1<=D,又因为di+1>=2,所以D>=2^m
弱化定义可得2
m+1<=2^m
如果m=1仅当d1>=2时候符合,当m=2时候,仅当max(d1,d2)>=2时候符合
如果m>=3根据弱定义可知2*m+1<=2^m<=D,始终符合。
总结:素数和两个不相同素数的乘积,不是强复合数
那么开始解决问题,可以把a里面所有数都分解为素数,因为相等,分解完的乘积是一样的。
因为两个相同的素数的乘积是强复合数,那么就可以把其当作一个组合。
剩下的数,更具上面m>=3时候乘积一定是强复合数,可以将剩下的数合成多个三元组!计算有多少个三元组即可

官方AC代码:

#include <bits/stdc++.h>using namespace std;int main() {int tt;cin >> tt;while (tt--) {int n;cin >> n;map <int,int> a;for (int i = 0; i < n; i++) {int x;cin >> x;for (int j = 2; j * j <= x; j++) {//分解为多个素数while (x % j == 0) {x /= j;a[j]++;//计算数出现了几次}}if (x != 1) {//同上理a[x]++;//计算数出现了几次}}int res = 0, rem = 0;for (pair <int, int> p : a) {int num = p.first;int cnt = p.second;res += cnt / 2;//相同素数组成多个二元组rem += cnt % 2;//剩下的数加起来}res += rem / 3;//计算三元组的个数cout << res << '\n';}return 0;
}

当时写的:

#include <bits/stdc++.h>
using namespace std;#define x first
#define y second
#define lowbit(x) ((x)&(-(x)))
#define int long long
#define rep(i,a,b) for(int i=(int)a,i##i=(int)b;i<=i##i;i++)
#define per(i,a,b) for(int i=(int)a,i##i=(int)b;i>=i##i;i--)
typedef long long ll;
typedef pair<int,int> PII;
typedef unsigned long long ULL;
const int N = 1000005;
const double PI = acos(-1);
map<int,int>ma;// 1 yes // 2 no
map<int,int>shu;// 1 yes //2 no
bool jude_shu(int x){if(shu[x]==1)return true;else if(shu[x]==2)return false;if(x<=1)return false;else if(x==2)return true;for(int i=2;i<=sqrt(x);i++){if(x%i==0){shu[x]=2;return false;}}shu[x]=1;return true;
}
bool jude(int x){if(x==2||x==3){ma[x]=2;return false;}if(ma[x]==1)return true;else if(ma[x]==2)return false;else{int shu=0,no_shu=0;for(int i=2;i*i<=x;i++){if(x%i==0){if(jude_shu(i))shu++;else no_shu++;}if(x%(x/i)==0){if(jude_shu(x/i))shu++;else no_shu++;}}if(shu<=no_shu){//qiang_fu_hema[x]=1;return true;}else {ma[x]=2;return false;}}
}
void solve()
{int n;cin>>n;int all=1;for(int i=0;i<n;i++){int num;cin>>num;all*=num;}int sum=0;//if(jude(all))cout<<"1\n";for(int i=2;i*i<=all;i++){if(all%i==0){//cout<<i<<' ';if(jude(i))sum++;//cout<<jude(i)<<endl;}if(all%(all/i)==0){//cout<<all/i<<' ';if(jude(all/i))sum++;//cout<<jude(all/i)<<endl;}}if(sum<=jude(all))cout<<"1\n";else if(sum>0)cout<<sum<<"\n";else cout<<"0\n";
}signed main()
{std::ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int _ = 1;cin>>_;while(_--)solve();
}

Codeforces Round 868 (Div. 2) C. Strongly Composite相关推荐

  1. Codeforces Round #506 (Div. 3)

    Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...

  2. Codeforces Round #563 (Div. 2)/CF1174

    Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...

  3. 构造 Codeforces Round #302 (Div. 2) B Sea and Islands

    题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...

  4. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  5. Codeforces Round #712 Div.2(A ~ F) 超高质量题解(每日训练 Day.15 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #712 Div.2(A ~ F) 题解 比赛链接:https:// ...

  6. Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...

  7. Codeforces Round #700 (Div. 2) D2 Painting the Array II(最通俗易懂的贪心策略讲解)看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 整场比赛的A ~ E 6题全,全部题目超高质量题解链接: Codeforces Round #700 ...

  8. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  9. Codeforces Round #699 (Div. 2) (A ~ F)6题全,超高质量良心题解【每日亿题】2021/2/6

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) (A.B.C)[每日亿题]2021/2/ ...

最新文章

  1. 觉SLAM的主要功能模块分析
  2. python3字符编码str_聊聊Python 3 的字符串:str 和 bytes 的区别
  3. 5G万物智联下互联网通信技术升级之路
  4. linux shell之cut命令
  5. python dll注入 网络_python – 检测反射型DLL注入
  6. 75.58 亿美元成交!美国最大规模 5G 毫米波频谱拍卖
  7. android实现Materia Design风格APP(四):ViewPager同时显示3个item及设置切换动画
  8. Stroustrup 谈 C++ 11的新特性
  9. JAVA基础语言——JAVASE
  10. Set接口以及子集合(HashSet/LinkedHashSet/TreeSet)的用法和数据结构
  11. 升华网第三次培训心得
  12. tomcat启动项目时一直卡住无反应的解决方案
  13. 视频格式转换器如何截取视频片段
  14. 在maven中创建jsp依赖
  15. dockers容器基础及基础命令(一)
  16. php微博互粉网站源代码,PHP联合【新浪微博】实现第三方登陆
  17. 中国MEMS传感器行业运营模式调研及投资效益分析报告2022-2027年
  18. 熟悉linux开发环境_熟悉但“新”的分析开发方式
  19. Hadoop KMS环境安装
  20. SSL协议解析及SSL虚拟专用网

热门文章

  1. HBASE Compaction 简介
  2. 马斯克:太阳膨胀或致地球所有物种灭亡
  3. mysql executebatch_mysql PreparedStatement executeBatch SQL语句的问题 | 学步园
  4. -webkit-appearance:none
  5. 为摄影师设计的Photoview
  6. java xsd_『XSD校验XML』使用java通过XSD校验XML文件
  7. 量化投资之自动化实盘交易
  8. 智能安防产品公司及产品
  9. (centos7-x86)花样玩转zabbix6.0LTS仪表盘构件
  10. Android-方法重载