HDU 5428
2015-09-06 03:17
267 查看
题意:给你N个数,让你求出这N个数最小的因子之积,但要满足一个条件,那就是这个乘积必须包含三个因子可以为本身、
思路:既然包含三个因子并且包含了本身、 那么完全可以知道,这个乘积只需要所有数中不包含1的最小因子的乘积、
既然要找出最小因子的乘积、那么可以用筛选法来求出他的所有因子、首先找到其中的一个因子,然后除尽,一直除到不能除为止、
将每个因子存入数组中、 要注意一个东西,那就是它自己是它自己的因子或者除去一部分因子剩下的最后那个数,如果大于1,那么
这个因子也是一定要的、因为我要找的是最小的两个因子,并不知道这个因子是否为这最小的两个因子其中的一个、 并且,如果只给
两个数字,他们都为素数,这两个素数特别特别大的话,那么最小两个因子的乘积和为他们的乘积、所以无论怎样都要剩下的大于一的
因子、
这到底的测试数据应该不大,数组只要开成大于1000 就能过,不过呢,如果有大数据的题,就要开成对应的数组、这个还是需要注意的。
时间复杂度O(n*longm)
AC代码:
思路:既然包含三个因子并且包含了本身、 那么完全可以知道,这个乘积只需要所有数中不包含1的最小因子的乘积、
既然要找出最小因子的乘积、那么可以用筛选法来求出他的所有因子、首先找到其中的一个因子,然后除尽,一直除到不能除为止、
将每个因子存入数组中、 要注意一个东西,那就是它自己是它自己的因子或者除去一部分因子剩下的最后那个数,如果大于1,那么
这个因子也是一定要的、因为我要找的是最小的两个因子,并不知道这个因子是否为这最小的两个因子其中的一个、 并且,如果只给
两个数字,他们都为素数,这两个素数特别特别大的话,那么最小两个因子的乘积和为他们的乘积、所以无论怎样都要剩下的大于一的
因子、
这到底的测试数据应该不大,数组只要开成大于1000 就能过,不过呢,如果有大数据的题,就要开成对应的数组、这个还是需要注意的。
时间复杂度O(n*longm)
AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=40000; int T; int n; long long a[100],x,cnt; long long vis[maxn]; int main() { scanf("%d",&T); while(T--){ memset(vis,0,sizeof(vis)); scanf("%d",&n); for(int i=0;i<n;i++) scanf("%I64d",&a[i]); cnt=0; for(int i=0;i<n;i++){ x=a[i]; for(long long j=2;j*j<=x;j++){ while(x%j==0){ x/=j; vis[cnt++]=j; } } if(x>1) vis[cnt++]=x; } sort(vis,vis+cnt); if(cnt<2) printf("-1\n"); else printf("%I64d\n",vis[0]*vis[1]); } return 0; }
相关文章推荐
- [React + webpack] hjs-webpack
- C语言--static全局使用示例
- grep 使用的一个问题
- 西雅图中央社区学院
- 西雅图大学
- C/C++输入输出流总结 (转载)
- hadoop 自学指南三之WordCount解析(2)
- ALPS语言学校(西雅图)|ALPS Language School (Seattle)
- android json解析及简单例子
- POJ2074Line of Sight【直线相交判定+求交点】
- Android json的一些学习
- clfeak与matlab的匹配
- 归并排序
- ubuntu redis安装
- [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
- 《Java核心技术卷二》笔记(三)正则表达式
- prlink elf format
- POJ 3518 Prime Gap题意好难理解
- iOS网络--网络HTTP
- Linux基础--系统启动中grub功能