Home > Web Front-end > HTML Tutorial > Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (数学、dp)_html/css_WEB-ITnose

Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (数学、dp)_html/css_WEB-ITnose

WBOY
Release: 2016-06-24 11:54:39
Original
1275 people have browsed it

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

41 4 3 2
Copy after login

output

15
Copy after login

input

26 3
Copy after login

output

13
Copy after login
题意:
Copy after login
给你一个a序列,找出一个b序列,1?≤?bi?≤?ai,使得max(bi)=lcm(bi),问这样的bi序列有多少个。
Copy after login
思路:
Copy after login
先对a排序,枚举i=max(bi),对i因式分解,那么大于等于i的部分很好处理,直接pow_mod()相减,小于i的部分就任意取一个约束就够了。
Copy after login
代码:
Copy after login
<pre name="code" class="n">#include <iostream>#include<cstring>#include<cstdio>#include<string>#include<vector>#include<algorithm>#define INF 0x3f3f3f3f#define maxn 100005#define mod 1000000007typedef 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;}
Copy after login
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template