zoukankan      html  css  js  c++  java
  • HDU 5428 The Factor (素因数分解)

    题意:给出n个数,问这n个数的乘积中至少有三个因子的最小因子。若不存在这样的因子,则输出 -1;

    思路:求出每个数的最小的两个素因数,然后输出其中最小的两个数的乘积。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<queue>
    #include<algorithm>
    #include<cmath>
    #include<map>
    using namespace std;
    #define INF 0x7fffffff
    
    int isprime[100000],prime[100000],cnt = 0; 
    long long num[100000];
    
    int init(){              // 求 1 - 100000内的素数 (100000*100000 > 1000000000)
    	int i,j;
    	memset(isprime,1,sizeof(isprime));
    	for(i=2;i<100000;i++){
    		if(!isprime[i])
    			continue ;
    		prime[cnt++] = i;
    		for(j =i+i;j<100000;j+=i)
    			isprime[j] = 0;
    	}
    }
    
    int main(){
    	int i,j,n,t,w,x,p;
    	init();
    	cin >> t;
    	while(t--){
    		w = 0;
    		scanf("%d",&n);
    		for(i=1;i<=n;i++){
    			scanf("%d",&x);
    			p = 0;
    			for(j=0;j<cnt && x >= prime[j] && p<2;j++)
    			    while(x%prime[j] == 0){
    			    	p++;
    			    	num[w++] = prime[j];
    			    	x /= prime[j];
    			    	if(p >=2 )
    			    	    break;
    			    }
    			if(x != 1)
    			    num[w++] = x;
    		}
    		sort(num,num+w);
    		if(w < 2)
    		    printf("-1
    ");
    		else
    		    printf("%I64d
    ",num[0]*num[1]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    BJDCTF-WP
    Python 每日一练(4)
    Python 每日一练(3)
    BUUCTF Crypto
    Python每日一练(1)
    Python 每日一练(2)
    oracle 组函数
    oracle 组函数
    oracle
    前端实战遇到问题
  • 原文地址:https://www.cnblogs.com/jxgapyw/p/4787732.html
Copyright © 2011-2022 走看看