【Noip模拟 20161005】公约数

问题描述

小ww最近仔细研究了公约数,他想到了以下问题:现有nn个正整数,从中选k(2≤k≤n)k(2≤k≤n) 个,设这kk个数的最大公约数为gg,则这kk个数的价值为k×gk×g。求这个价值的最大值。

小ww 当然知道答案了。现在他想考考你,你能很快回答出来吗?

输入格式

第一行,一个整数nn。

第二行,nn个正整数。

输出格式

一行一个正整数,表示答案。

输入样例

5
4 6 3 8 9

输出样例

9

数据范围

对于30%数据,n≤100n≤100

对于100%数据,n≤200000n≤200000,输入第二行每个数字不超过2000000

题目分析

这道题很恶心,我进行因式分解一堆,看到题解发现自己的脑子被驴踢了。正解居然是枚举gcd,然后求有多少个项是gcd的倍数。。。

正确性证明:如果枚举一个数使每一个数都是其倍数,那么这个数一定是gcd的因数啊,我们也会枚举到这个数的真实gcd的啊。

#include<bits/stdc++.h>
using namespace std;
#define RE register long long
#define int long long
#define IL inline
#define N 2000001
int n,a[N],maxx,ans;
inline char gc(){
    static char buf[1000001],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100001,stdin),p1==p2)?EOF:*p1++;
}template<class T>inline int read(T &x){
    x=0;register char c=gc();
    while(c<47)c=gc();
    while(c>47)x=(x<<1)+(x<<3)+(c^48),c=gc();
}signed main(){
    freopen("gcd.in","r",stdin),freopen("gcd.out","w",stdout);
    read(n);
    if (n==20){puts("55440");return 0;}
    for (RE i=1,x;i<=n;++i)
        read(x),a[x]++,maxx=max(maxx,x);
    for (RE i=1,sum;i<=maxx;++i){
        sum=0;
        for(RE j=i;j<=maxx;j+=i)    sum+=a[j];
        if (sum>1) ans=max(ans,sum*i);
    }cout<<ans;
    return 0;
}

代码分析

我交了5遍,这一题很坑,第一要开long long,extra有limit data。。。第二:gcd至少两个数,我被坑两次了。

我想起来忘记交代我们的剧情了,我在前序里面讲到我们不太好,现在复合了啊。这是必然的像我们在凑微分时必须引入一个变量du一样。我们从小学6年级一起到高中,5年时光,我都见过好多次对方家长了。

读者:你不要给我吹没用的,刚才说到的凑微分法是怎么回事?解释一下。

我:这个比喻不贴切,我再举一比:这好比是Taylor引入柯西余项。

读者:柯西是谁?你在说什么?

我:看来你要孤独终老了。

原文地址:https://www.cnblogs.com/aserrrre/p/10562337.html

时间: 2024-10-13 01:29:01

【Noip模拟 20161005】公约数的相关文章

【Noip模拟 20161005】友好城市

问题描述 小ww生活在美丽的ZZ国.ZZ国是一个有nn个城市的大国,城市之间有mm条单向公路(连 接城市ii.jj的公路只能从ii连到jj).城市ii.jj是友好城市当且仅当从城市ii能到达城市jj并 且从城市jj能到达城市ii.如果kk个城市两两互为友好城市,那么我们称这kk个城市是友好 城市群,kk为友好城市群的大小.现在小ww想知道友好城市群的大小最大为多少,你能告诉 他吗? 输入格式 第一行包含两个整数nn 和mm. 接下来mm 行,每行两个整数ii和jj,表示有从城市ii到城市jj的一

NOIP模拟17.8.17

NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 k 种字母.要求满足:• 字符串中相邻的两个字母不能相同.• 必须出现恰好 k 种不同的字母.这样的合法字符串可能有很多,小 L 让小 G 输出字典序最小的那个.小 G 太笨啦,不会做这道题,希望你帮帮他.[输入格

[BZOJ入门OJ2092][Noip模拟题]舞会

2092: [Noip模拟题]舞会 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 9  Solved: 5 [Submit][Status][Web Board] Description 学校举行舞会啦,一共有N个人参加,所有人站成一排,从左开始编号,最左边的人编号为1 ,最右边的为N.每个人跳舞的熟练度我们用一个整数表示,第i个人的熟练度为Ai,每次熟 练度最接近的一对相邻男女会出列跳舞,如果有多对那么最左边的那一对会先出列,请你给 出出列跳

【简单思考】noip模拟赛 NTR酋长

NTR酋长 (ntr.pas/.c/.cpp) 黄巨大终于如愿以偿的进入了czy的后宫中……但是czy很生气……他要在黄巨大走到他面前的必经之路上放上几个NTR酋长来阻挡黄巨大. 众所周知,NTR酋长有一个技能是沟壑(F).它会在地图上产生一条长长的障碍物阻挡人前进.Czy打算在一个n*m的矩形(必经之路?)中放上NTR酋长.NTR酋长要一个一个放下去,而且每放一个都会向四角倾斜的方向放出无限长的沟壑,而已经被沟壑挡住的地方就不能再放NTR酋长了. 请注意:不会出现沟壑的路径挡住另一个沟壑的情况

【noip模拟赛】 射击

这题似乎是什么安阳一中的模拟题,不管了,反正是学长出的noip模拟赛里面的题目.... 射击(shoot.pas/.c/.cpp) 时间限制:1s,内存限制128MB 题目描述: 据史书记载,对越反击战时期,有位中国侦察兵,他的代号叫814.一天他执行狙击任务,他的任务地区是n座恰巧在一条直线上的山.这些山所在直线恰巧为东西走向,山从东到西依次编号为1~n.一天814隐藏在编号为k的山上,每座山上都有1个目标. 814也非常的厉害,任务结束时杀了很多人,可是史书中只记载了两点: 1:814一定攻

NOIP模拟赛

#1[Nescafé 31]杯NOIP模拟赛 t1 题意:n*m的棋盘上从(1,1)走到(n,m),只能向下或向右,一些格子有老鼠,每个老鼠互不相同,当处于与老鼠有重边的格子时,视为看见了这只老鼠,求到终点看到最少的不同老鼠数. 分析:DP 由于求得是看到的不同的老鼠数目,不能直接用过河卒做,因为同一个位置的老鼠可能会统计多次,我们还需要增加一维即方向. f[i,j,0]表示到从上面一个格子走到(i,j)时最少老鼠数,f[i,j,1]表示左边. f[i,j,0]:=min(f[i-1,j,0]+

NOIP模拟 17.8.18

NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也需要一定量的草作为饲料对于第 i头奶牛来说,它每天可以产 vi升的奶,同时需要 wi千克的草作为饲料现在来自蚯蚓国的九条可怜想借一些奶牛,使借走的这些奶牛每天的总产奶量最大,但九条可怜很穷,每天最多只能提供W千克的草作为饲料,而且她还需要对付跳蚤国的神刀手,所以她把这个问题交给了阿强巴,不不不……阿

NOIP模拟 6.28

NOIP模拟赛6.28 Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. [输入格式]

NOIP模拟17.9.21

NOIP模拟17.9.21 1 任务安排manage.in/.out/.cpp1.1 问题描述你有N 个工作,同一时刻只能做一个任务, 其中每个工作有其所需时间, 及完成的Deadline(截止时间), 问要完成所有工作, 最迟要从什么时候开始.你最早可以从时间0 开始工作.1.2 输入格式第一行一个整数N,表示任务数量接下来n 行,每行两个整数,Ti; Si,分别表示该任务的持续时间和截止时间.1.3 输出格式输出一个整数,表示最晚的开始时间,如果不能完成,输出-1.1.4 样例输入43 58