• 洛谷 P1414 又是毕业季II (多个数的最大公因数)


    这道题其实不难,但是我想复杂了

    我想的是把每个数质因数分解,然后每次就枚举每个质因数

    来求最小公倍数。

    然后想了想这样复杂度将会非常的大,肯定超时
    然后看了题解发现不需要质因数分解,直接存因数的个数就好了
    c[i]表示i这个因数出现的次数。
    然后因为当k越小的时候答案越大(严格来说是大于等于),这是显而易见的,当数少了
    之后对最大公因数的限制就越少。
    所以我们可以把因数从大到小枚举,来求答案。

    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define REP(i, a, b) for(int i = (a); i < (b); i++)
    #define _for(i, a, b) for(int i = (a); i <= (b); i++)
    using namespace std;
    
    const int MAXN = 1e6 + 10;
    int c[MAXN], n, maxt, m, x;
    
    int main()
    {
    	scanf("%d", &n);
    	_for(i, 1, n)
    	{
    		scanf("%d", &x);
    		maxt = max(maxt, x);
    		m = sqrt(x + 0.5);
    		_for(i, 1, m)
    			if(x % i == 0)
    			{
    				c[i]++;
    				if(x != i * i) c[x/i]++;
    			}
    	}
    	
    	int ans = maxt;
    	_for(i, 1, n)
    	{
    		while(c[ans] < i) ans--;
    		printf("%d
    ", ans);
    	}
    	
    	puts(""); for(int i = maxt; i >= 1; i--) printf("%d
    ", c[i]); 
    	
    	return 0;
    }
  • 相关阅读:
    xml序列化
    C#.NET对象深拷贝
    C++的函数传参
    hubilder热更新
    qrcode加背景图
    js点击屏幕出现文字
    JS实现搜索匹配功能
    FiraCode字体(好看的字体)
    基于PHP和JS的AES相互加密解密方法详解(CryptoJS)
    常见的正则匹配
  • 原文地址:https://www.cnblogs.com/sugewud/p/9819340.html
Copyright © 2020-2023  润新知