zoukankan      html  css  js  c++  java
  • 紫书 例题 10-4 UVa 10791(唯一分解定理)

    首先分解,然后可以发现同一个因子ai不能存在于两个以上的数中

    因为求的是最小公倍数,如果有的话就可以约掉

    所以数字必然由ai的pi次方的乘积组成,那么显然,在

    a最小为2,而b大于2的情况下a*b>a+b

    所以要让和最小,就每一个ai的pi次方作为一个数就好了。

    另外注意long long,素数和1

    #include<cstdio>
    #include<cmath>
    #define REP(i, a, b) for(int i = (a); i < (b); i++)
    using namespace std;
    
    int main()
    {
    	int n, kase = 0;
    	while(~scanf("%d", &n) && n)
    	{
    		if(n == 1) { printf("Case %d: 2
    ", ++kase);  continue; }	
    		int m = floor(sqrt(n) + 0.5), num = 0;
    		long long ans = 0;
    		REP(i, 2, m)
    			if(n % i == 0)
    			{
    				num++;
    				int t = 1;
    				while(n % i == 0) n /= i, t *= i;
    				ans += t;
    			}
    		
    		if(n > 1) num++, ans += n;
    		if(num == 1) ans++;
    		printf("Case %d: %lld
    ", ++kase, ans); 
    	} 
    	return 0;
    }

  • 相关阅读:
    状压DP
    数位dp
    浅谈网络最大流
    Luogu p2456 二进制方程
    dp基础√
    双联通分量与二分图
    是时候再写一篇新的博客了
    神仙网络最大流
    状态压缩dp相关
    图论 test solution
  • 原文地址:https://www.cnblogs.com/sugewud/p/9819515.html
Copyright © 2011-2022 走看看