HDU2710-Max Factor-分解质因子

本文探讨了一种用于查找给定整数中最大素因子的算法,该算法通过分解素因子来实现,时间复杂度为N*log(MAXN),适用于在数论和计算机科学领域解决相关问题。

给出N个MAXN以内的不同的数,求出素因子最大的数。

使用朴素的方法分解素因子即可。时间复杂度为N*log(MAXN)

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 const int maxn = 20100;
 8 int N,save[5010];
 9 int prime[maxn];
10 
11 void init()
12 {
13     for(int i=2;i<=maxn;i++)
14     {
15         if(!prime[i]) prime[++prime[0]] = i;
16         for(int j=1;j<=prime[0]&&prime[j]<=maxn/i;j++)
17         {
18             prime[prime[j]*i] = 1;
19             if(i%prime[j]==0) break;
20         }
21     }
22 }
23 
24 int getFactors(int x)
25 {
26     int tmp = x;
27     int ans = 0;
28     for(int i=1;prime[i]<=tmp/prime[i];i++)
29     {
30         if(tmp%prime[i] == 0)
31         {
32             ans = max(ans,prime[i]);
33             while(tmp%prime[i] == 0)
34             {
35                 tmp/=prime[i];
36             }
37         }
38     }
39     if(tmp != 1)
40     {
41         ans = max(ans,tmp);
42     }
43     return ans;
44 }
45 
46 int main()
47 {
48     init();
49     int ans,mxp;
50     while(~scanf("%d",&N))
51     {
52         ans=0;mxp=0;
53         for(int i=0;i<N;i++)
54         {
55             scanf("%d",&save[i]);
56             int p = getFactors(save[i]);
57             if(p > mxp) {ans = save[i];mxp = p;}
58         }
59         if(ans == 0) ans = 1;
60         printf("%d\n",ans);
61     }
62 }

 

转载于:https://www.cnblogs.com/helica/p/5197902.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值