> 백엔드 개발 > PHP 튜토리얼 > Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (数学、dp)_PHP教程

Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (数学、dp)_PHP教程

WBOY
풀어 주다: 2016-07-13 10:14:54
원래의
972명이 탐색했습니다.

Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (数学、dp)

C. Little Elephant and LCM time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standard output

The Little Elephant loves the LCM (least common multiple) operation of a non-empty set of positive integers. The result of the LCM operation of k positive integers x1,?x2,?...,?xk is the minimum positive integer that is divisible by each of numbers xi.

Let's assume that there is a sequence of integers b1,?b2,?...,?bn. Let's denote their LCMs as lcm(b1,?b2,?...,?bn) and the maximum of them as max(b1,?b2,?...,?bn). The Little Elephant considers a sequence b good, if lcm(b1,?b2,?...,?bn)?=?max(b1,?b2,?...,?bn).

The Little Elephant has a sequence of integers a1,?a2,?...,?an. Help him find the number of good sequences of integers b1,?b2,?...,?bn, such that for all i (1?≤?i?≤?n) the following condition fulfills: 1?≤?bi?≤?ai. As the answer can be rather large, print the remainder from dividing it by 1000000007 (109?+?7).

Input

The first line contains a single positive integer n (1?≤?n?≤?105) — the number of integers in the sequence a. The second line contains nspace-separated integers a1,?a2,?...,?an (1?≤?ai?≤?105) — sequence a.

Output

In the single line print a single integer — the answer to the problem modulo 1000000007 (109?+?7).

Sample test(s)
input
4
1 4 3 2
로그인 후 복사
output
15
로그인 후 복사
input
2
6 3
로그인 후 복사
output
13
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
题意:
로그인 후 복사
给你一个a序列,找出一个b序列,1?≤?bi?≤?ai,使得max(bi)=lcm(bi),问这样的bi序列有多少个。
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
思路:
로그인 후 복사
先对a排序,枚举i=max(bi),对i因式分解,那么大于等于i的部分很好处理,直接pow_mod()相减,小于i的部分就任意取一个约束就够了。
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
代码:
로그인 후 복사
<pre class="code">#include <iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include
#define INF 0x3f3f3f3f
#define maxn 100005
#define mod 1000000007
typedef long long ll;
using namespace std;

int n;
int a[maxn];

ll pow_mod(ll x,ll n)
{
    ll res = 1;
    while(n)
    {
        if(n&1) res = res * x %mod;
        x = x * x %mod;
        n >>= 1;
    }
    return res;
}
void solve()
{
    int i,j;
    ll ans=0,res;
    sort(a+1,a+n+1);
    for(i=1;i<=a[n];i++) // 枚举答案
    {
        vector<int>fac;
        for(j=1;j*j<=i;j++) // factor
        {
            if(i%j==0)
            {
                fac.push_back(j);
                if(j*j!=i) fac.push_back(i/j);
            }
        }
        sort(fac.begin(),fac.end());
        int pos,pre=1;
        res=1;
        for(j=1;j<fac.size();j++)
        {
            pos=lower_bound(a+1,a+n+1,fac[j])-a;
            res*=pow_mod(j,pos-pre);
            res%=mod;
            pre=pos;
        }
        ans+=res*((pow_mod(j,n-pre+1)-pow_mod(j-1,n-pre+1)+mod)%mod);
        ans%=mod;
    }
    printf("%I64d\n",ans);
}
int main()
{
    int i,j;
    while(~scanf("%d",&n))
    {
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        solve();
    }
    return 0;
}
로그인 후 복사

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/907369.htmlTechArticleCodeforces Round #157 (Div. 1) C. Little Elephant and LCM (数学、dp) C. Little Elephant and LCMtime limit per test4 secondsmemory limit per test256 megabytesinputstandard in...
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿