51nod_1355

Posted 0922-Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51nod_1355相关的知识,希望对你有一定的参考价值。

题目链接

题意

给出 \\(n\\) 个正整数 \\(a_1,a_2\\cdots,a_n\\),求 \\(\\operatornamelcm(F_a_1, F_a_2,\\cdots, F_a_n)\\)

其中 \\(\\F_i\\\\) 为斐波那契数列。
\\(2\\le n\\le 50000, 1\\le a_i\\le 1000000\\)
3s

解答

斐波那契数列的最小公倍数很难直接求,但是其最大公约数却有优美的结论 \\(\\gcd(F_n, F_m) = F_\\gcd(n, m)\\),于是考虑将最小公倍数转化成最大公约数。

此处有 \\(\\mathrmMin-Max\\) 反演的经典推论:

\\[\\operatornamelcm(S) = \\prod_T\\subseteq S\\land T\\not=\\varnothing \\left(\\gcd(T)\\right)^(-1)^|T|-1 \\]

证明很简单,分别考虑每个质因子,\\(\\operatornamelcm\\) 就是求其 \\(\\max\\)\\(\\gcd\\) 就是求其 \\(\\min\\),即证。

接下来开始推柿子:

\\[\\beginsplit \\operatornamelcm(F_s(s\\in S)) &=\\prod_T\\subseteq S\\land T\\not =\\varnothing\\gcd(F_t(t\\in T))^(-1)^|T|-1 \\\\ &=\\prod_T\\subseteq S\\land T\\not =\\varnothingF_\\gcd(T)^(-1)^|T|-1 \\endsplit \\]

第一步转化完毕!

接下来肯定不能直接枚举子集算,于是进行下一步的推倒:

我们用 \\(c_i\\) 表示 \\(i\\) 的倍数出现的次数。

对每个 \\(x\\) 分别考虑 \\(F_x\\) 的次数:

\\[\\beginsplit \\sum_x | T [\\gcd(T) = x](-1)^|T|-1 &=\\sum_x | T [\\gcd\\left(\\frac T x\\right) = 1](-1)^|T|-1 \\\\ &= \\sum_x | T \\sum_d|\\frac Tx \\mu(d)(-1)^|T|-1 \\\\ &= \\sum_d=1^\\infty \\mu(d)\\sum_i = 1^c_d\\cdot x\\binomc_d\\cdot xi(-1)^-1 \\\\ &= \\sum_d=1^\\infty \\mu(d) [c_d\\cdot x > 0] \\endsplit \\]

其中第三行中的 \\(i\\) 为枚举 \\(|T|\\)

于是对于每个 \\(x\\) 枚举 \\(d\\) 计算,总复杂度是调和级数级别的,也就是 \\(\\mathcalO(n\\log n)\\) 的。

于是总复杂度为 \\(\\mathcalO(n\\sqrt n)\\),瓶颈在于枚举因子。

51nod_1417:天堂里的游戏

题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1417

假设 ans=n/m,C=(A+B)/2

  若出正面 E_1 = nA-(m-n)C

  若出反面 E_2 = (m-n)B-nC

由样例解释可知

得  m = A+B+2C,n=B+C

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

LL gcd(LL a,LL b)
{
    return b? gcd(b,a%b):a;
}

int main()
{
    LL T;cin>>T;
    while(T--)
    {
        LL a,b,c;
        cin>>a>>b;
        c=(a+b)/2;
        LL m=a+b+2*c,n=b+c;
        LL g=gcd(m,n);
        printf("%lld/%lld\n",n/g,m/g); 
    }
}

 

以上是关于51nod_1355的主要内容,如果未能解决你的问题,请参考以下文章

1355 斐波那契的最小公倍数

51nod2576

51Nod_1043_幸运号码

51nod 1220 约数之和

51nod 1294:修改数组

51nod_1040:最大公约数之和