首页 > 其他分享 >[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)

时间:2023-02-21 10:04:42浏览次数:42  
标签:Prime Crash jzptab int sum 1ll MAXN bzoj mod


题目描述

[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java组数据,给出[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_02,[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_03,求[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_04

题目分析

直接开始变换,假设N<M
[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_05
总算推完了…
此时只需要[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_06线性筛出[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_07,然后处理[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_08的前缀和
[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_09可以[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_10
利用整除分块优化,时间复杂度为[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_11

AC code([bzoj 2693] jzptab)
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 10000005, mod = 1e8+9;
int N, M;
namespace Mobius
{
int mu[MAXN], Prime[MAXN], cnt;
bool IsnotPrime[MAXN];
int sum[MAXN];
void init()
{
sum[1] = 1;
for(int i = 2; i <= MAXN-5; i++)
{
if(!IsnotPrime[i]) Prime[++cnt] = i, sum[i] = 1-i;
for(int j = 1; j <= cnt && i * Prime[j] <= MAXN-5; j++)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0) { sum[i * Prime[j]] = sum[i]; break; }
sum[i * Prime[j]] = 1ll * sum[i] * (1 - Prime[j]) % mod;
}
}
for(int i = 1; i <= MAXN-5; i++)//前缀和
sum[i] = (sum[i-1] + 1ll*sum[i]*i%mod) % mod;
}
int Sum(int N, int M)
{
return ((1ll*N*(N+1)/2) % mod) * ((1ll*M*(M+1)/2) % mod) % mod;
}
int calc(int N, int M)
{
int ret = 0;
for(int i = 1, j; i <= N; i=j+1)//整除分块
{
j = min(N/(N/i), M/(M/i));
ret = (ret + 1ll * (sum[j] - sum[i-1]) % mod * Sum(N/i, M/i) % mod) % mod;
}
return ret;
}
}
using namespace Mobius;
int main ()
{
int T; init();
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &N, &M); if(N > M) swap(N, M);
printf("%d\n", (calc(N, M) + mod) % mod);
}
}
AC code([bzoj 2154] Crash的数字表格)

这道题有个恶心的地方,不能用[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_12来预处理,否则会[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_13,要读入[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_02,[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_03后再[bzoj 2693] jzptab & [bzoj 2154] Crash的数字表格 (莫比乌斯反演)_java_16处理

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 10000005, mod = 20101009;
int N, M;
namespace Mobius
{
int mu[MAXN], Prime[MAXN], cnt;
bool IsnotPrime[MAXN];
int sum[MAXN];
void init()
{
sum[1] = 1;
for(int i = 2; i <= N; i++)
{
if(!IsnotPrime[i]) Prime[++cnt] = i, sum[i] = 1-i;
for(int j = 1; j <= cnt && i * Prime[j] <= N; j++)
{
IsnotPrime[i * Prime[j]] = 1;
if(i % Prime[j] == 0) { sum[i * Prime[j]] = sum[i]; break; }
sum[i * Prime[j]] = 1ll * sum[i] * (1 - Prime[j]) % mod;
}
}
for(int i = 1; i <= N; i++)
sum[i] = (sum[i-1] + 1ll*sum[i]*i%mod) % mod;
}
int Sum(int N, int M)
{
return ((1ll*N*(N+1)/2) % mod) * ((1ll*M*(M+1)/2) % mod) % mod;
}
int calc(int N, int M)
{
int ret = 0;
for(int i = 1, j; i <= N; i=j+1)
{
j = min(N/(N/i), M/(M/i));
ret = (ret + 1ll * (sum[j] - sum[i-1]) % mod * Sum(N/i, M/i) % mod) % mod;
}
return ret;
}
}
using namespace Mobius;
int main ()
{
scanf("%d%d", &N, &M); if(N > M) swap(N, M); init();
printf("%d\n", (calc(N, M) + mod) % mod);
}


标签:Prime,Crash,jzptab,int,sum,1ll,MAXN,bzoj,mod
From: https://blog.51cto.com/u_15973510/6075827

相关文章

  • [bzoj 1471] 不相交路径 (容斥原理)
    题目描述给出一个结点的有向无环简单图。给出个不同的点,,,,定义不相交路径为两条路径,两条路径的起点分别为和,对应的两条路径的终点为和,要求满足这两条路径不相交,即两条路径上没......
  • [Sdoi2013] [bzoj 3198] spring (hash+容斥原理)
    题目描述给出个维坐标,求有多少对点对满足恰好个位置相等坐标数值在以内题目分析这道题一看就是hash容斥原理,用个位置对应相等个位置对应相等个位置对应相等的…但是不能......
  • [bzoj 3701] Olympic Games (莫比乌斯反演)
    题目描述给出表示一个的格点图,求能够互相看见的点对个数对取模的值.能互相看见定义为此两点连线上没有其他的格点且欧氏距离在[l,r]范围内题目分析首先我们将上下左右相邻......
  • [bzoj 2393] Cirno的完美算数教室 (容斥原理+dfs剪枝)
    题目描述发现了一种数,这种数呢只含有和两种数字现在想知道中有多少个数能被数整除  1<L<R<10^{10}题目分析由于R<10^{10},最大只有10位的数可以对答案造成贡献,每一位只能......
  • 【技术剖析】7. 看看毕昇 JDK 团队是如何解决 JVM 中 CMS 的 Crash
    【技术剖析】7.看看毕昇JDK团队是如何解决JVM中CMS的Crashhttps://bbs.huaweicloud.com/forum/thread-168485-1-1.html JDKJVM发表于2021-11-1016:24:5......
  • 关闭 ReportCrash 进程防止CPU占用率过高 [MacBook]
    关闭ReportCrash的原因自己MacBookPro总是过载,机器很热。结果通过看进程top命令,看到ReportCrash占用了了过高的CPU,而且好像我用不上。于是乎,得关掉。然后,机器就......
  • Linux 上 libcurl库 curl_easy_perform Crash(signal 11 - SIGSEGV)
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。前置说明  本文作为本人csdnblog的主站的备份。(BlogID......
  • Power Apps Crash信息整理
    微软推出了Crash信息的整合。可以参考下面的Doc来判断crash的类型和调优英文:PreventcanvasapprestartsinthePowerAppsmobileapp-PowerApps|MicrosoftLear......
  • APP出现Crash的常见原因
    设备兼容由于设备的多样性,APP在不同的设备上表现也可能不一样程序逻辑错误数组越界内存溢出逻辑错误并发操作内存管理错误内存低,APP所需的内存超出设备限......
  • 【Baltic2003】【BZOJ1370】Gang团伙(并查集,拆点)
    problem给定n个人朋友的朋友是朋友,敌人的敌人是朋友朋友之间组成一个团伙,求团伙数solution将每个点x拆成两个:x和x+n(分别表示x的朋友和敌人)如果x和y是朋友,就将x和y合并如果x......