[xsy2282]cake
题意:一个$n\times n$的有标号点阵,现在用一条直线把它们分成两部分,问有多少种不同的分法
结论:方案数就是以点阵上的点为端点且不经过第三个点的线段数
对一个满足要求的线段,将其绕中点顺时针转一个小角度,所在直线是一种切割方案
对于一种分割方案,把直线逆时针旋转直到卡住,卡到的两个点(在原直线的两边且最近的点对)可以连出一条线段
水平竖直的答案为$2n(n-1)$,斜向的答案是$2\sum\limits_{i=1}^n\sum\limits_{j=1}^n(n-i)(n-j)[(i,j)=1]$
后面的sigma可以写成$(n-1)^2+2\sum\limits_{i=1}^n\sum\limits_{j=1}^{i-1}(n-i)(n-j)[(i,j)=1]$
一个结论是$\sum\limits_{i=1}^{n-1}i[(n,i)=1]=\frac{n\varphi(n)}2(n\geq2)$,这是因为在$n\geq3$时如果$(n,i)=1$那么$(n,n-i)=1$,刚好配成$\frac{\varphi(n)}2$对,而在$n=2$时又刚好满足
所以它又可以化成$\sum\limits_{i=2}^n(n-i)\left(n\varphi(i)-\frac{i\varphi(i)}2\right)$,展开后本质是求$\sum\limits_{i=1}^ni^k\varphi(i)$
因为$\sum\limits_{d|n}d^k\varphi(d)\left(\frac nd\right)^k=n^{k+1}$,所以直接杜教筛即可
#include<stdio.h>
#include<map>
using namespace std;
typedef long long ll;
const int T=1000000;
int p;
int mul(int a,int b){return a*(ll)b%p;}
int pr[T+10],phi[T+10],phk[T+10][3];
bool np[T+10];
void sieve(){
int i,j,M=0;
phi[1]=1;
for(i=2;i<=T;i++){
if(!np[i]){
pr[++M]=i;
phi[i]=i-1;
}
for(j=1;j<=M&&i*pr[j]<=T;j++){
np[i*pr[j]]=1;
if(i%pr[j]==0){
phi[i*pr[j]]=phi[i]*pr[j];
break;
}
phi[i*pr[j]]=phi[i]*(pr[j]-1);
}
}
for(i=1;i<=T;i++){
phk[i][0]=(phk[i-1][0]+phi[i])%p;
phk[i][1]=(phk[i-1][1]+mul(i,phi[i]))%p;
phk[i][2]=(phk[i-1][2]+mul(mul(i,i),phi[i]))%p;
}
}
map<int,int>g;
int pre(int k,int n){
if(k==0)return n;
if(k==1)return(ll)n*(n+1)/2%p;
if(k==2)return(__int128)n*(n+1)*(2*n+1)/6%p;
return((ll)n*(n+1)/2%p)*((ll)n*(n+1)/2%p)%p;
}
int S(int k,int n){
if(n<=T)return phk[n][k];
if(g.count(n))return g[n];
int s=pre(k+1,n),i,nex;
for(i=2;i<=n;i=nex+1){
nex=n/(n/i);
(s-=mul(pre(k,nex)-pre(k,i-1),S(k,n/i)))%=p;
}
return g[n]=s;
}
int getT(int n){
int s=mul(mul(n,n),S(0,n)-1),t;
g.clear();
t=mul(S(1,n)-1,3);
if(~t&1)
t>>=1;
else
t=mul(t,(p+1)/2);
(s-=mul(n,t))%=p;
g.clear();
t=S(2,n)-1;
if(~t&1)
t/=2;
else
t=mul(t,(p+1)/2);
(s+=t)%=p;
return s;
}
int main(){
int n;
scanf("%d%d",&n,&p);
sieve();
printf("%lld",((mul(2*n,n-1)+2ll*(mul(n-1,n-1)+2ll*getT(n)))%p+p)%p);
}
[xsy2282]cake的更多相关文章
- Windows 7上执行Cake 报错原因是Powershell 版本问题
在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...
- 2015暑假多校联合---Cake(深搜)
题目链接:HDU 5355 http://acm.split.hdu.edu.cn/showproblem.php?pid=5355 Problem Description There are m s ...
- Scalaz(15)- Monad:依赖注入-Reader besides Cake
我们可以用Monad Reader来实现依赖注入(dependency injection DI or IOC)功能.Scala界中比较常用的不附加任何Framework的依赖注入方式可以说是Cake ...
- uva10167 Birthday Cake
Lucy and Lily are twins. Today is their birthday. Mother buys a birthday cake for them. Now we put t ...
- HDU 4762 Cut the Cake(公式)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Brute Force --- UVA 10167: Birthday Cake
Problem G. Birthday Cake Problem's Link:http://uva.onlinejudge.org/index.php?option=com_onlinejudg ...
- 2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest, B. Layer Cake
Description Dasha decided to bake a big and tasty layer cake. In order to do that she went shopping ...
- hdu acmsteps 2.1.3 Cake
Cake Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- ZOJ 3905 Cake ZOJ Monthly, October 2015 - C
Cake Time Limit: 4 Seconds Memory Limit: 65536 KB Alice and Bob like eating cake very much. One ...
随机推荐
- Spring MVC 到 Spring Boot 的简化之路(山东数漫江湖)
背景 从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷.但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的 ...
- 小程序_RSA加密功能
这是开发的第三个小程序,基于一个物流系统,简化功能开发下单流程.登录的时候,系统是使用RSA进行加解密的. 流程:第一个接口获取到后端传过来的密匙共钥(publicKey),通过公钥使用RSA加密密码 ...
- 日常开发技巧:在远程机器上直接使用adb
背景 嵌入式开发中,开发工作是在远程服务器上进行的.当需要adb推送一个文件到开发板时,则需要重新在本地机器中找到该文件,再执行命令.这样的操作比较麻烦. 下面介绍我的解决方式. sshfs挂载 首先 ...
- 25个Linux相关的网站【转】
转自:http://www.cnblogs.com/Lindaman/p/4552805.html 下面是25个最具有影响力,也是最重要的Linux网站,这些网站提供了Linux的分发包,软件,文件, ...
- Redis 分片实现 Redis Shard [www]
Redis 分片实现 Redis Shard https://www.oschina.net/p/redis-s ...
- STL容器之间的差异和联系
1.vector (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间的插入,删除元素要慢(涉及元素复制移动),而且如果一开始分配的空间不够的话,有一个 ...
- python logging system
官方教程:https://docs.python.org/2/library/logging.html 1. 用法1 import logging import logging.handlers L ...
- 解决: httpclient ssl 验证导致死锁问题
线上图片下载服务器平时运行正常,最近突然出现一种比较奇怪的现象,只接受请求,但却没有处理请求,最开始怀疑下载线程挂掉了,dump 项目线程后发现异常: "pool-2-thread-1&qu ...
- HIbernate学习笔记2 之 主键生成方式
一.hibernate主键生成方式: 1.常用方式:mysql:自增长生成主键(identity) <generator class="identity"> </ ...
- java之基本数据类型与引用数据类型
基本数据类型 需要注意的是字符是基本数据类型,但是字符串不是基本数据类型. 引用数据类型 类.接口类型.数组类型.枚举类型.注解类型. (上面说的字符串String属于引用数据类型中“类”的范畴) 两 ...