Home > Backend Development > PHP Tutorial > Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (mathematics, dp)_PHP tutorial

Codeforces Round #157 (Div. 1) C. Little Elephant and LCM (mathematics, dp)_PHP tutorial

WBOY
Release: 2016-07-13 10:14:54
Original
979 people have browsed it

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
Copy after login
output
15
Copy after login
input
2
6 3
Copy after login
output
13
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
题意:
Copy after login
给你一个a序列,找出一个b序列,1?≤?bi?≤?ai,使得max(bi)=lcm(bi),问这样的bi序列有多少个。
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
思路:
Copy after login
先对a排序,枚举i=max(bi),对i因式分解,那么大于等于i的部分很好处理,直接pow_mod()相减,小于i的部分就任意取一个约束就够了。
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
Copy after login
代码:
Copy after login
<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;
}
Copy after login

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...
Related labels:
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