【CODEVS】5036 寻找最大质因数(数据加强版)

题目描述 Description

给出N个数字,试求质因数最大的数字。

输入描述 Input Description

第一行,一个整数N,表示数字个数。
接下来N行,每行一个整数ai,表示给出的数字。

输出描述 Output Description

一个整数,表示质因数最大的数字。(如果有多个最大相同,则输出最后输入那一个)

样例输入 Sample Input

4

35

60

40

42

样例输出 Sample Output

42

数据范围及提示 Data Size & Hint

N≤10^6,2≤ai≤10^6

用cin可能会导致超时


好久没写博客了(一个多月了)
发个博客证明我的存在

思路就是先预处理1-10^6的所有质数(线性筛素数),再挨个查找

有几个地方要注意,一是数据较大,最好用读入优化,下面来看看
cin PK 读入优化

cin:

这里写图片描述

读入优化:
这里写图片描述

总时间:
这里写图片描述

显而易见。
再就是剪枝。
如果当前数要比找的下一个质数小
也就是 x < prime[i] 就跳出
或者 x 小于当前的最大质数 跳出
就可以了

#include<cstdio>
#include<iostream>
#define MAXN 20000
#define INF 1000010
using namespace std;
int n,x,maxx=-1,m,zhi=-1;
bool vis[INF];
int tot,prime[INF];
inline void read(int&x) {
    x=0;char c=getchar();
    while(c>'9'||c<'0') c=getchar();
    while(c>='0'&&c<='9') x=10*x+c-48,c=getchar();
}
inline void prim() {
    for(int i=2;i<=INF;i++) {
        if(!vis[i]) prime[++tot]=i;
        for(int j=1;j<=tot&&(i*prime[j]<=INF);j++) {
            vis[i*prime[j]]=true;
            if(!(i%prime[j])) break;
        }
    }   
}
int main() {
    read(n);
    prim();
    //for(int i=1;i<=tot;i++) printf("%d\n",prime[i]);
    for(int i=1;i<=n;i++) {
        cin>>x;
        if(!vis[x]) {if(x>zhi) maxx=x,zhi=x;}
        else {
            m=x;
            for(int i=1;i<=tot;i++) {
                if(x<prime[i]) break;
                if(x<zhi) break;
                if(x%prime[i]==0) {
                    if(prime[i]>zhi) {
                        zhi=prime[i];
                        maxx=m;
                        x/=zhi;
                    }
                    else if(prime[i]==zhi) {
                        maxx=max(maxx,m);
                        x/=zhi;
                    }
                }
            }
        }
    }
    printf("%d\n",maxx);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值