首页 > 其他分享 >[HDU 5608]Function(莫比乌斯反演 + 杜教筛)

[HDU 5608]Function(莫比乌斯反演 + 杜教筛)

时间:2023-02-21 10:05:25浏览次数:36  
标签:Function Prime HDU int 杜教 mu 1ll MAXN mod


题目描述

[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演
[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_02 [HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_03

只有最多[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_04组数据

题目分析

如此一来就可以杜教筛了,然而仅仅这样还是会T,于是我们在想一想如何筛出前面一部分的[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_05
[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_06,根据莫比乌斯反演
[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_07
于是用[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_08筛出前[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_09项就行了
总时间复杂度[HDU 5608]Function(莫比乌斯反演 + 杜教筛)_莫比乌斯反演_10

AC code:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int MAXN = 1000001;
const int mod = 1e9+7;
const int inv3 = 333333336;

inline int g(int n)
{
return (1ll * n * n % mod - 3ll * n % mod + 2) % mod;
}

int Prime[MAXN], Cnt, mu[MAXN], f[MAXN];
bool IsnotPrime[MAXN];

void init()
{
mu[1] = 1;
for(int i = 2; i < MAXN; ++i)
{
if(!IsnotPrime[i]) Prime[++Cnt] = i, mu[i] = -1;
for(int j = 1; j <= Cnt && i * Prime[j] < MAXN; ++j)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0)
{
mu[i * Prime[j]] = 0;
break;
}
mu[i * Prime[j]] = -mu[i];
}
}
for(int i = 1; i < MAXN; ++i)
for(int j = i; j < MAXN; j+=i)
f[j] = (f[j] + 1ll * mu[j/i] * g(i) % mod) % mod;
for(int i = 1; i < MAXN; ++i) f[i] = (f[i-1] + f[i]) % mod;
}
map<int,int>F;
inline int solve(int n)
{
if(n < MAXN) return f[n];
if(F.count(n)) return F[n];
int ret = (1ll * n * (n+1) % mod * (n-4) % mod * inv3 % mod + 2ll*n%mod) % mod;
for(int i = 2, j; i <= n; i=j+1)
{
j = n/(n/i);
ret = (ret - 1ll * (j-i+1) * solve(n/i) % mod) % mod;
}
return F[n]=ret;
}

int main()
{
init();
int T, n;
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
printf("%d\n", (solve(n)+mod)%mod);
}
}


标签:Function,Prime,HDU,int,杜教,mu,1ll,MAXN,mod
From: https://blog.51cto.com/u_15973510/6075825

相关文章

  • HDU 1238 Substrings
    SubstringsTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):7699    AcceptedSubmission(s):3474......
  • HDU 1256 画8
    画8TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):4645    AcceptedSubmission(s):2004Proble......
  • HDU 1219 AC Me
    ACMeTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):13482    AcceptedSubmission(s):5934Pro......
  • HDOJ2111 Saving HDU(背包问题)
    题目链接:​​SavingHDU​​这题是个背包问题,首先按照单价排序,然后,装的下就装,装不下就分割。importjava.util.Scanner;//背包问题publicclassMain{privatestaticScan......
  • KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道......
  • KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布......
  • Functions2-18
    因为underscore本来就是为了充分发挥JavaScript的函数式编程特性,所以也提供了大量JavaScript本身没有的高阶函数。bind​​bind()​​有什么用?我们先看一个常见的错误用法:'u......
  • cpp pass function as argument
    //model/*.cppvoidutil::invoke_pass_func(constint&x,constint&y){std::cout<<"x="<<x<<",y="<<y<<std::endl;intsum=pass_func(x,y,&add);std::c......
  • JavaScript normalize function All In One
    JavaScriptnormalizefunctionAllInOneUnicodestring/Emojistring国际化String.prototype.normalize()Thenormalize()methodreturnstheUnicodeNormaliz......
  • python入门之函数function
    """函数function定义:功能,使用一个名称,包装多个语句语法:做def名字(形参):函数体......