hdu (5428) - The Factor (질량 인수 분해)
11223 단어 수학 문제
Accepts: 101
Submissions: 811
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
문제 설명
有一个数列,FancyCoder沉迷于研究这个数列的乘积相关问题,但是它们的乘积往往非常大。幸运的是,FancyCoder只需要找到这个巨大乘积的最小的满足如下规则的因子:这个因子包含大于两个因子(包括它本身;比如,4有3个因子,因此它是满足这个要求的一个数)。你需要找到这个数字并输出它。但是我们知道,对于某些数可能没有这样的因子;在这样的情况下,请输出-1.
입력 설명
输入文件的第一行有一个正整数T (1≤T≤15),表示数据组数。
接下去有T组数据,每组数据的第一行有一个正整数n (1≤n≤100).
第二行有n个正整数a1,…,an (1≤a1,…,an≤2×109), 表示这个数列。
출력 설명
输出T行T个数表示每次询问的答案。
입력 샘플
2
3
1 2 3
5
6 6 6 6 6
출력 샘플
6
4
제목: 중국어 문제...
사고방식: 교묘 하군.모든 숫자 가 그렇게 크 지만 모든 숫자 에 있어 서 그들의 질 인자 만 유용 하 다. 그래서 우 리 는 모든 질 인 자 를 분해 한 후에 그것들 에 대해 순 서 를 매 긴 다음 에 두 개의 가장 작은 상승 을 찾 으 면 된다.모든 숫자의 질 인자 개수 가 2 개 보다 작 으 면 무 해 다.
#include
#include
#include
#include
#include
using namespace std;
#define maxn 110
typedef __int64 ll;
ll a[maxn];
ll res[123456];
int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
memset(res,0,sizeof(res));
memset(a,0,sizeof(a));
int cnt=0;
for(int i=1;i<=n;i++) scanf("%I64d",&a[i]);
for(int i=1;i<=n;i++){
for(int j=2;(ll)j*j<=a[i];j++){ //注意这里是小于等于a[i]; 一开始打错了,导致我查错查了好久
while(a[i]%j==0){
res[cnt++]=j;
a[i]=a[i]/j;
}
}
if(a[i]!=1) res[cnt++]=a[i];
}
sort(res,res+cnt);
if(cnt<2) printf("-1
");
else{
ll ans=res[0]*res[1];
printf("%I64d
",ans);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
PAT B1013 수소수카탈로그 의문 코드 반성 잠시 없다 마지막 줄의 마지막 숫자는 빈칸을 출력할 수 없습니다. 다음 알고리즘을 실행하여 제104 10^4 104개의 질수가 얼마나 되는지 보고 maxn의 크기를 설정할 수 있다(이 생각은...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.