P1587 [NOI2016] 循环之美

devtools/2024/10/19 4:22:13/

[题目通道]([NOI2016] 循环之美 - 洛谷)

#include<map>
#include<cmath>
#include<cstdio>
#include<algorithm>
#define fp(i,a,b) for(int i=a,I=b;i<=I;++i)
#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
using namespace std;
const int N=7e5+5,E=2e6+5;
typedef int arr[N];typedef long long ll;
struct Am{int nx,x,w;}e1[E];
struct Ans{int nx,n,m,k;ll w;}e2[E];
int n,m,k,M,c1,c2,K[2000],f1[E],f2[E];arr is,pr,mu,Smu;
int Sm(int x){if(x<=M)return Smu[x];int u=(x+2017)%E;for(int i=f1[u];i;i=e1[i].nx)if(e1[i].x==x)return e1[i].w;e1[++c1]=Am{f1[u],x,1};f1[u]=c1;int&w=e1[c1].w,i=2,j=sqrt(x);for(;i<=j;++i)w-=Sm(x/i);for(;i<=x;i=j+1)j=x/(x/i),w-=(j-i+1)*Sm(x/i);return w;
}
ll sol(int n,int m,int k){if(!n||!m)return 0;int u=(2017ll*n+m+k)%E;for(int i=f2[u];i;i=e2[i].nx)if(e2[i].n==n&&e2[i].m==m&&e2[i].k==k)return e2[i].w;e2[++c2]=Ans{f2[u],n,m,k,0};f2[u]=c2;ll&w=e2[c2].w;if(k==1){if(n>m)swap(n,m);int i=1,j=sqrt(n),s,t=0,x,y;for(;i<=j;++i,t=s)s=Sm(i),w+=1ll*(n/i)*(m/i)*(s-t);for(;i<=n;i=j+1,t=s)x=n/i,y=m/i,j=min(n/x,m/y),s=Sm(j),w+=1ll*x*y*(s-t);u=(2017ll*m+n+k)%E;e2[++c2]=Ans{f2[u],m,n,k,w};f2[u]=c2;}else for(int i=1;i<=K[0]&&K[i]<=k;++i)if(k%K[i]==0&&mu[K[i]])w+=sol(m/K[i],n,K[i])*mu[K[i]];return w;
}
int main(){#ifndef ONLINE_JUDGEfile("s");#endifscanf("%d%d%d",&n,&m,&k);M=min(N-5,max(k,min(n,m)));Smu[1]=mu[1]=1;fp(i,2,M){if(!is[i])pr[++pr[0]]=i,mu[i]=-1;for(int j=1,x;j<=pr[0]&&(x=i*pr[j])<=M;++j){is[x]=1;if(i%pr[j])mu[x]=-mu[i];else break; }Smu[i]=Smu[i-1]+mu[i];}fp(i,1,k)if(k%i==0)K[++K[0]]=i;printf("%lld",sol(n,m,k));
return 0;
}


http://www.ppmy.cn/devtools/97039.html

相关文章

Go Channel 详解

概述 在 Go 语言中&#xff0c;channel 是一种用于在 goroutine 之间传递数据的机制。它提供了同步和通信的能力&#xff0c;使得并发编程变得更加简单和安全。Channel 在 Go 语言中的设计是类型安全的&#xff0c;并且支持发送和接收两种操作。 基本概念 创建通道 创建一个…

HTML组件上传

<!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> </head><fieldset style"width: 200px"><legend>文本组建上传</legend><form action"#" me…

【论文阅读】Enhance Model Stealing Attack via Label Refining(2022)

摘要 With machine learning models(机器学习模型) being increasingly(越来越多) deployed(部署), model stealing attacks(模型窃取攻击) have raised an increasing interest. Extracting decision-based models(基于决策的模型窃取) is a more challenging task…

JavaScript学习笔记(十二):JS Web API

1、Web API - 简介 Web API 是开发人员的梦想。 它可以扩展浏览器的功能它可以极大简化复杂的功能它可以为复杂的代码提供简单的语法 1.1 什么是 Web API&#xff1f; API 指的是应用程序编程接口&#xff08;Application Programming Interface&#xff09;。 Web API 是 …

【Android】Android AOP 编程框架

什么是AOP编程 AOP编程全称Aspect Oriented Programming&#xff0c;面向切面编程 主要功能是在不改变原代码的前提下&#xff0c;对特点代码节点进行修改&#xff0c;预处理&#xff0c;后期处理 AOP的历史 Android的AOP编程框架比较多&#xff0c;它们大多具备以下特点 …

BEM架构

视频 总结&#xff1a; BEM架构&#xff1a;一个命名类的规范而已&#xff0c;说白了就是如何给类起名字使用sass的目的&#xff1a;在<style>中模块化的使用类名&#xff0c;同时减少代码数量 1、 BEM架构 &#xff08;通义灵码查询结果&#xff09; BEM (Block Ele…

人工智能和机器学习 3(复旦大学计算机科学与技术实践工作站)python机器学习、Pytorch库入门、d2l学习+<机器学习、神经网络————原理、理论>

前言 安装 — 动手学深度学习 2.0.0 documentation (d2l.ai)https://zh.d2l.ai/chapter_installation/index.html 安装 我们需要配置一个环境来运行 Python、Jupyter Notebook、相关库以及运行本书所需的代码&#xff0c;以快速入门并获得动手学习经验。 安装 Miniconda 最…

深入探讨C语言中的高级指针操作

目录 指针与内存管理的高级技巧 1. 动态数组的重新分配 2. 内存碎片化的处理 3. 内存对齐 函数指针数组与回调函数的高级用法 1. 基本函数指针用法 2. 函数指针数组 3. 回调函数的使用 指针与数据结构的结合 1. 自定义链表 C语言以其强大的底层操作能力和高效的性能著…