【数论】[CF258C]Little elephant and LCM

题目

分析:枚举最大数,然后找出它所有因数p1…….pk, 从中任意选取一些数,这些数的LCM|这个数且,这些数的最大LCM就是枚举的这个数,且若pi<=aj<=pi+1则前i个数可以放在j这个位置,即j这个位置有cj种选择,总方案数就是c1*c2*……*cj

作为优化,对于每个pi,我们枚举有aj满足pi<=aj<=pi+1的个数记为qi,则有ans=1^qi*2^qi*……*q^qk,但这些方案包含不选择最大数的情况,则最后一项应为q^qk-(q-1)^qk

代码:

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAXN 100000
#define MOD 1000000007
long long a[MAXN+10],n,p[MAXN+10],cnt,ans;
void Read(long long &x){
    char c;
    while((c=getchar())&&c!=EOF){
        if(c>=‘0‘&&c<=‘9‘){
            x=c-‘0‘;
            while((c=getchar())&&c>=‘0‘&&c<=‘9‘)
                x=x*10+c-‘0‘;
            ungetc(c,stdin);
            return;
        }
    }
}
void isfactor(long long n){
    long long t=sqrt(n+0.5),i;
    cnt=0;
    for(i=1;i<=t;i++)
        if(n%i==0)
            p[++cnt]=i;
    i=cnt;
    cnt*=2;
    if(t*t==n)
        cnt--,i--;
    for(;i;i--){
        p[cnt-i+1]=n/p[i];
    }
}
long long pow(long long a,long long b){
    long long ret=1;
    while(b){
        if(b&1)
            ret=ret*a%MOD;
        b>>=1;
        a=a*a%MOD;
    }
    return ret;
}
int main()
{
    long long i,j,k,t,s;
    Read(n);
    for(i=1;i<=n;i++)
        Read(a[i]);
    sort(a+1,a+n+1);
    for(i=1;i<=a[n];i++){
        isfactor(i);
        t=0;
        s=1;
        for(j=2;j<=cnt;j++){
            k=lower_bound(a+1,a+n+1,p[j])-a-1;
            s=s*pow(j-1,k-t)%MOD;
            t=k;
        }
        s=s*(pow(cnt,n-t)-pow(cnt-1,n-t))%MOD;
        ans=(ans+s)%MOD;
    }
    printf("%I64d\n",ans);
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-09 22:02:10

【数论】[CF258C]Little elephant and LCM的相关文章

20170906

水题 T1 Arpa and a research in Mexican wave CodeForces - 851A 1 #include<cstdio> 2 int n,k,t; 3 int main() 4 { 5 scanf("%d%d%d",&n,&k,&t); 6 if(t>=k&&t<=n) 7 printf("%d",k); 8 else if(t<k) 9 printf(&quo

挖坑……

我上一篇总结已经提到了现在正是开战的时期,现在我就来看看我这三个月究竟要怎样力挽狂澜才能走下去. 本文中将按照我的熟练程度给知识打分,分越低越紧迫. 1.基础算法 1.1 贪心(4) 出了它的话我肯定可以看出来,但是不确定能不能实现. 1.2 枚举(5) 这个--我想就不用说了吧-- 1.3 分治/二分/倍增(3?4?5?) 分治算法的几个经典案例:快排.二分查.归并都是掌握相对还好的几个知识点,二分答案也能看出来但是不一定会验证,个人觉得倍增可能会成为一大坑点. 1.4 *构造(3) 我说实话

UVA 10791 Minimum Sum LCM (数论)

LCM (Least Common Multiple) of a set of integers is defined as the minimum number, which is a multiple of all integers of that set. It is interesting to note that any positive integer can be expressed as the LCM of a set of positive integers. For exa

Uva 11388 GCD LCM ( 数论 )

Uva  11388 GCD LCM( 数论 ) 题意: 求是否存在a,b 使得lcm(a,b) = L, gcd(a,b) = G,不存在输出-1,存在输出a,b,且a尽可能小 分析: 强行暴力是不可能的数据很大,要用llu,这里有两种思路 思路一: 由题意可知 a*b = G*L 保证a = G的倍数的情况下,枚举a再判断G*L能否整除a,最后判断b是否为a的倍数.a从G开始扫到sqrt(G*L) //输入两个整数G,L //找出a,b 使得 gcd(a,b) = G lcm(a,b) =

HDU4497 GCD and LCM 数论 素数分解

题意很简单首先以前做最简单的LCM跟CGD的时候都知道先求出两个数A,B的最大公约数GCD,那么LCM可以利用  A*B/GCD来求得,这点一开始脑残了没想到,结果没有进行特盘所以错了,意思就是 题目给的L%G不为0的话就是无解,结果我给判其它的去了,肯定漏了些什么没有发现 然后对于 L/G进行素因子分解,同时任意的数都能够通过素因子分解来表示,所以三个解x,y,z也能分解 L/G = p1^q1*p2^q2.... x = p1^i1*... y = p1^j1*... z = p1^k1*.

数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho

数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p2^{a2}p3^{a3}...pn^{an},b=p1^{b1}p2^{b2}p3^{b3}...pn^{bn}\),那么\(gcd(a,b)=\prod_{i=1}^{n}pi^{min(ai,bi)},lcm(a,b)=\prod_{i=1}^{n}pi^{max(ai,bi)}\)(0和任何

ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄? ̄))

gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •?∀•? ) 简写你懂吗) 解释(不想看就跳过){ 首先,求一个gcd,然后... a / gcd 和 b / gcd 这两个数互质了,也就是 gcd(   a / gcd ,b / gcd  )  =  1,然后... lcm = gcd *  (a / gcd) * (b / gcd) lcm = (a *

hdu 4497 GCD and LCM 数论 素数分解

GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1339    Accepted Submission(s): 607 Problem Description Given two positive integers G and L, could you tell me how many solutions of

UVA - 10791 - Minimum Sum LCM (数论相关!)

题目链接:Minimum Sum LCM UVA - 10791 Minimum Sum LCM Time Limit:3000MS   Memory Limit:Unknown   64bit IO Format:%lld & %llu SubmitStatus Description  Minimum Sum LCM  LCM (Least Common Multiple) of a set of integers is defined as the minimum number, whic