前言:想了两个小时orz,最后才想到要用约数个数定理……

-------------

题目大意:

给定$n,q,A[1],A[2],A[3]$

现有$A[i]=(A[i-1]+A[i-2]+A[i-3])mod q$

求$(\sum_{i=1}^n \prod_{d|i} d^{A_i})mod10007$的值。

$n\leq 300000,q,A[1],A[2],A[3]\leq 10^{16}$。

------------------------

朴素算法是$O(n^2 \log n)$的,就算优化也是$O(n \sqrt n \log n)$,难以承受。

这时,我们注意到:

$ \prod_{d|i} d^{A_i}$

$=(\prod_{d|i} d)^{A_i}$

即$i$的所有因数的乘积的$A_{i}$次方。

我们设$f[i]$表示$i$的约数个数,因为因数是成对出现的,

那么有$\prod_{d|i} d=i^{f[i]/2}$(这里的$/$是计算机意义的)

若$i$为完全平方数,则结果还要乘$\sqrt i$。、

所以最后化简为:

$(\sum_{i=1}^n (i^{f[i]/2})^{A_i})mod10007$ $f[i]=2k$

$(\sum_{i=1}^n (i^{f[i]/2}*\sqrt i)^{A_i})mod10007$ $f[i]=2k+1$

$f[i]$可以用接近于线性的算法求得。时间复杂度$O(n\log n)$。

代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,q,a[],is[],f[],ans,prime[];
bool vis[];
void work()
{
vis[]=vis[]=;
for (int i=;i<=n;i++)
{
if (!vis[i]) prime[++prime[]]=i;
for (int j=;j<=prime[];j++)
{
if (i*prime[j]>n) break;
vis[i*prime[j]]=;
if (!(i%prime[j])) break;
}
}
}
int solve(int now)
{
int t=now,sum=,cnt=;
for (int j=;j<=prime[]&&prime[j]*prime[j]<=t;j++)
{
if (t%prime[j]==){
cnt=;
while(t%prime[j]==) cnt++,t/=prime[j];
sum=sum*(cnt+);
}
}
if (t>) sum<<=;
return sum;
}
int qpow(int a,int b)
{
a%=;
int res=;
while(b)
{
if (b%==) res=(res*a)%;
a=(a*a)%;
b>>=;
}
return res;
}
signed main()
{
cin>>n>>q>>a[]>>a[]>>a[];
work();
for (int i=;i*i<=n;i++) is[i*i]=i;
for (int i=;i<=n;i++)
a[i]=(a[i-]+a[i-]+a[i-])%q;
for (int i=;i<=n;i++){
f[i]=solve(i);
if (is[i]) ans=(ans+qpow(qpow(i,f[i]/)*is[i],a[i]))%;
else ans=(ans+qpow(qpow(i,f[i]/),a[i]))%;
}
cout<<ans;
return ;
}

【FZYZOJ】数论课堂 题解(约数个数定理)的更多相关文章

  1. hdu1492(约数个数定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1492 这里先讲一下约数个数定理: 对于正整数x,将其质因分解为 x = pow(p1, a) * po ...

  2. 【搜索】【约数个数定理】[HAOI2007]反素数ant

    对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数. 所以,n以内的反质数即为不超过n的 ...

  3. 【线性筛】【筛法求素数】【约数个数定理】URAL - 2070 - Interesting Numbers

    素数必然符合题意. 对于合数,如若它是某个素数x的k次方(k为某个素数y减去1),一定不符合题意.只需找出这些数. 由约数个数定理,其他合数一定符合题意. 就从小到大枚举素数,然后把它的素数-1次方都 ...

  4. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

  5. 【线性筛】【质因数分解】【约数个数定理】hdu6069 Counting Divisors

    d(x)表示x的约数个数,让你求(l,r<=10^12,r-l<=10^6,k<=10^7) #include<cstdio> using namespace std; ...

  6. 数论专项测试——约数个数和(lucas的数论)

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  7. UVA - 294 Divisors【数论/区间内约数最多的数的约数个数】

    Mathematicians love all sorts of odd properties of numbers. For instance, they consider to be an int ...

  8. 【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)

    题目: POJ1845 分析: 首先用线性筛把\(A\)分解质因数,得到: \[A=p_1^{a_1}*p_2^{a_2}...*p_n^{a_n} (p_i是质数且a_i>0) \] 则显然\ ...

  9. 牛客:t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数(数论+贪心)

    https://ac.nowcoder.com/acm/contest/907/B t次询问,每次给你一个数n,求在[1,n]内约数个数最多的数的约数个数 分析: 根据约数和定理:对于一个大于1正整数 ...

随机推荐

  1. Esp8266 网络结构体

    Esp8266建立网络连接相关结构体如下: 结构体头文件espconn.h /** Protocol family and type of the espconn */ enum espconn_ty ...

  2. 树莓派4B踩坑指南 - (16)外接4k显示器的相关设置

    最近某宝新买了个4k显示器, 总价700多, 质量凑合, 就把树莓派接上来了, 这一下苦了眼睛了, 于是有了此番调整 1. 先解决4k下60帧的刷新率 在\boot\config.txt的末尾加入一条 ...

  3. 从零开始学Electron笔记(四)

    在之前的文章我们介绍了一下Electron的这个remote模块,接下来我们继续说一下Electron的右键菜单的制作. 在我们日常我们使用的软件中都会存在右键菜单的情况,比如我们用到的浏览器,开发所 ...

  4. 阿里云centos7服务器nginx配置及常见问题解答

    前言: 本文参考了jackyzm的博客:https://www.cnblogs.com/jackyzm/p/9600738.html,进行了内容的更新,并请注意这里适用的版本是centos7的版本.并 ...

  5. java学习第五天2020/7/10

    一. 今天继续学习算法: 1. 查找,一般我们采用的是顺序查找的方法,这种方法是比较简单,但是效率却很低:一般就是从第一个数开始与想要查找的那个数进行比较,当遇到相同的时候则就成功查找了: 另一种比较 ...

  6. Linux系统中到底应该怎么理解系统的平均负载

    02 | 基础篇:到底应该怎么理解“平均负载”? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 upt ...

  7. JVM 专题二:虚拟机(二)Java虚拟机

    2.1 什么是Java虚拟机? Java虚拟机是一台执行字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成. JVM平台的各种语言可以共享Java虚拟机带来的 ...

  8. Quartz.Net系列(十三):DateBuilder中的API详解

    1.DateOf.ToDayAt.TomorrowAt DateOf:指定年月日时分秒 public static DateTimeOffset DateOf(int hour, int minute ...

  9. Spring详细基本开发流程

    LOGO 文章已托管到GitHub,大家可以去GitHub查看阅读,欢迎老板们前来Star! 搜索关注微信公众号 码出Offer 领取各种学习资料! 一.Spring概述 1.1 Web开发中的一些问 ...

  10. MySQL主从复制--单库复制搭建

    背景说明 负责公司MySQL数仓的搭建和维护,因为前端业务涉及到一次业务表的分库,导致整个平台新增加一台MySQL服务器,需要将该库数据通过主从复制同步至原有的数仓实例. 数据流向说明如下图: 业务环 ...