BZOJ 3560 DZY Loves Math V 数论

题目大意:给定a1,a2,...,an,求

由于φ是积性函数,我们可以将i1i2...in分解质因数,对于每个质因数分开讨论,求积即可

将每个a分解质因数,假设分解后某个质数p在每个ai中的次数分别是bi,那么p对答案的贡献就是

于是对p^j维护一个前缀和,直接计算即可

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MOD 1000000007
using namespace std;
struct abcd{
    int p,a;
    bool operator < (const abcd &x) const
    {
        if(p!=x.p)
            return p<x.p;
        return a<x.a;
    }
}prime_factors[1001001];
int n,tot;
long long ans=1;
void Decomposition(int x)
{
    int i;
    for(i=2;i*i<=x;i++)
        if(x%i==0)
        {
            prime_factors[++tot].p=i;
            while(x%i==0)
                prime_factors[tot].a++,x/=i;
        }
    if(x^1)
        prime_factors[++tot].p=x,prime_factors[tot].a=1;
}
long long Quick_Power(long long x,long long y)
{
    long long re=1;
    while(y)
    {
        if(y&1) (re*=x)%=MOD;
        (x*=x)%=MOD;y>>=1;
    }
    return re;
}
void Calculate(int l,int r)
{
    static long long sum[30];
    long long p=prime_factors[l].p;
    long long re=1;
    int i;
    sum[0]=1;
    for(i=1;i<=prime_factors[r].a;i++)
        sum[i]=sum[i-1]*p%MOD;
    for(i=1;i<=prime_factors[r].a;i++)
        (sum[i]+=sum[i-1])%=MOD;
    for(i=l;i<=r;i++)
        (re*=sum[prime_factors[i].a])%=MOD;
    re--;(re*=Quick_Power(p,MOD-2))%=MOD;
    (re*=p-1,++re)%=MOD;
    (ans*=re)%=MOD;
}
int main()
{
    int i,x;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        scanf("%d",&x);
        Decomposition(x);
    }
    sort(prime_factors+1,prime_factors+tot+1);
    for(i=1;i<=tot;i++)
    {
        static int last;
        if(i==tot||prime_factors[i].p!=prime_factors[i+1].p)
            Calculate(last+1,i),last=i;
    }
    cout<<(ans%MOD+MOD)%MOD<<endl;
    return 0;
}
时间: 2024-11-09 03:08:36

BZOJ 3560 DZY Loves Math V 数论的相关文章

bzoj 3560 DZY Loves Math V - 线性筛 - 数论 - 扩展欧几里得算法

给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sample Input 3 6 10 15 Sample Output 1595 Hint 1<=n<=10^5,1<=ai<=10^7.共3组数据. 题目大意 (题目过于简洁,完全不需要大意) 题目虽然很简洁,但是处处挖着坑等你跳. 原计划两个小时把今天讲的例题A完,实际上两个小时都被这道题

【BZOJ 3560】 3560: DZY Loves Math V (欧拉函数)

3560: DZY Loves Math V Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 241  Solved: 133 Description 给定n个正整数a1,a2,-,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,-,an. Output 仅一行答案. Sample Input 3 6 10 15 Sample Output 1595 HINT 1<=n<=1

BZOJ3560 DZY Loves Math V 数论 快速幂

原文链接http://www.cnblogs.com/zhouzhendong/p/8111725.html 题目传送门 - BZOJ3560 题意概括 给定n个正整数a1,a2,-,an,求 的值(答案模10^9+7). 1<=n<=10^5,1<=ai<=10^7. 题解 本人是蒟蒻. 可以看这位大佬的(给出链接) http://blog.csdn.net/popoqqq/article/details/42739963 代码 呵呵,调试的时候照着他的改,改的几乎一样-- #i

bzoj 3309 DZY Loves Math

LINK:DZY Loves Math 一道比较有意思的数论题 原谅我的智障多调了40min. 可以简单的推式子推出 答案为\(\sum{w=1}^n\frac{n}{w}\frac{m}{w}\sum{x|w}\mu(x)f(\frac{w}{x})\) f函数定义和题目中一致. 考虑后面前缀和怎么求 发现光求f(x)复杂度都比较高.如果我们把f(x)求出再调和级数预处理 那得GG 1e7过不了log+根号 考虑考虑一下\(\mu\)和f的这种形式肯定值有局限 设后面的东西为g(x) 不难发现

bzoj 3309 DZY Loves Math——反演+线性筛

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 像这种数据范围,一般是线性预处理,每个询问 sqrt (数论分块)做. 先反演一番.然后 f( ) 还不能一个就花 log 的时间,所以要分析性质. 设 n 一共 m 个质因数,其中最大的指数是 t . 已有 Σ(d|n) f(d)*u(n/d) ,如果 u( ) 的部分含有指数>=2的质因子,就无贡献:所以 u( ) 里每种质因数选1个或0个,一共 2^m 种. 如果 n 里有一个

bzoj 3309 DZY Loves Math - 莫比乌斯反演 - 线性筛

对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b). Input 第一行一个数T,表示询问数. 接下来T行,每行两个数a,b,表示一个询问. Output 对于每一个询问,输出一行一个非负整数作为回答. Sample Input 4 7558588 9653114 6514903 445

BZOJ3560: DZY Loves Math V

虽然不是很神的题,不过拿短代码搞到rank1了那么纪念下. 先观察样例. 6=2*3; 10=2*5; 15=3*5; 对应答案:1595=5*11*29: 其中: 5=((1+2)*(1+2)*1*(2-1)+1)/2 11=((1+3)*1*(1+3)*(3-1)+1)/3 29=(1*(1+5)*(1+5)*(5-1)+1)/5 证明不写了……自行领会精神. 就是对每个n因数分解后对每个p分开搞搞. [代码](话说好不容易才发现插入代码这功能) 1 #include<cstdio> 2

BZOJ 3309 DZY Loves Math 莫比乌斯反演

题目大意: 枚举d=gcd(i,j),得到 现在我们只需要知道Σ[d|T]f(d)μ(T/d)的前缀和就行了 设这个函数为g(x) 观察这个函数 由于含平方因子数的μ值都为零,因此我们只考虑μ(T/d)!=0的数 令T=p1^a1*p2^a2*...*pk^ak,d=p1^b1*p2^b2*...*pk^bk 那么0<=(ai-bi)<=1 如果存在ai≠aj(i≠j),那么我们可以将所有的a分为两部分:最大的集合A和非最大的集合B 很显然f值由A中的选取方案决定 对于A中的每种选取方案,μ值

【bzoj3560】DZY Loves Math V 欧拉函数

题目描述 给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). 输入 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. 输出 仅一行答案. 样例输入 3 6 10 15 样例输出 1595 题解 欧拉函数 由于 $\varphi$ 是积性函数,所以可以单独考虑每个质因子的贡献. 那么对于最终的 $a=i_1i_2\dots i_n$ ,若其包含 $p^c\ ,\ c>0$ ,则贡献为 $\frac{p-1}{p}·p^c$ .因此求出 $p^c$ 的