【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
2721: [Violet 5]樱花
Time Limit: 5 Sec Memory Limit: 128 MB
Submit: 599 Solved: 354Description
Input
Output
Sample Input
Sample Output
HINT
Source
【分析】
之前推出来然后几天直接打然后把$n!^2$的约数记成$n^2$的约数也是醉、、
先通分。
则$(x+y)*n!=x*y$
设$g=gcd(x,y)$
则$(x'+y')*n!=x'*y'*g$
显然$gcd(x'+y',x')=gcd(x'+y',y')=1$
所以$x'*y'|n!$ 、$(x'+y')|g$
设$g=k(x'+y')$,则$n!=x'*y'*k$
枚举$n!$的互质约数对$(x',y')$,则k就确定了,所以只是问$n!$的互质约数对的个数。
把$n!$分解质因数,假设$n!=p1^{r1}+p2^{r2}+...+pn^{rn}$
$f[i]$表示前i个p对答案的贡献,则$f[i]=f[i-1]*(2*ri+1)$
则答案就等于$\Pi (2*ri+1)$,也就是$(n!)^{2}$的约数个数。【别人好像直接推出这个。。。?
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define Maxn 1000010
#define Mod 1000000007
#define LL long long int n;
int pri[Maxn],pl,mn[Maxn];
bool vis[Maxn];
void init()
{
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++)
{
if(!vis[i]) pri[++pl]=i,mn[i]=i;
for(int j=;j<=pl;j++)
{
if(i*pri[j]>n) break;
vis[i*pri[j]]=;
mn[i*pri[j]]=pri[j];
if(i%pri[j]==) break;
}
}
} int sm[Maxn];
void cal(int x)
{
if(x==) return;
sm[mn[x]]++;
cal(x/mn[x]);
} int main()
{
int ans=;
scanf("%d",&n);
init();
memset(sm,,sizeof(sm));
for(int i=;i<=n;i++) cal(i);
for(int i=;i<=n;i++) if(sm[i]) ans=1LL*ans*(*sm[i]+)%Mod;
printf("%d\n",ans);
return ;
}
2017-04-24 14:22:56
【BZOJ 2721】 2721: [Violet 5]樱花 (筛)的更多相关文章
- bzoj 2721[Violet 5]樱花 数论
[Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 671 Solved: 395[Submit][Status][Discuss ...
- 2721: [Violet 5]樱花
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 547 Solved: 322[Submit][Status][D ...
- 【BZOJ2721】[Violet 5]樱花 线性筛素数
[BZOJ2721][Violet 5]樱花 Description Input Output Sample Input 2 Sample Output 3 HINT 题解:,所以就是求(n!)2的约 ...
- BZOJ_2721_[Violet 5]樱花_数学
BZOJ_2721_[Violet 5]樱花_数学 Description Input Output $\frac{1}{x}+\frac{1}{y}=\frac{1}{m}$ $xm+ym=xy$ ...
- [BZOJ 2721] [Violet 5] 樱花 【线性筛】
题目链接:BZOJ - 2721 题目分析 题目大意:求出 1 / x + 1 / y = 1 / n! 的正整数解 (x, y) 的个数. 显然,要求出正整数解 (x, y) 的个数,只要求出使 y ...
- BZOJ 2721: [Violet 5]樱花
(X-N)(Y-N)=N^2 #include<cstdio> using namespace std; const int mod=1e9+7; int n,cnt,isprime[10 ...
- 2721: [Violet 5]樱花|约数个数
先跪一发题目背景QAQ 显然x,y>n!,然后能够设y=n!+d 原式子能够化简成 x=n!2d+n! 那么解的个数也就是n!的因子个数,然后线性筛随便搞一搞 #include<cstdi ...
- BZOJ2721 [Violet 5]樱花
先令n! = a: 1 / x + 1 / y = 1 / a => x = y * a / (y - a) 再令 k = y - a: 于是x = a + a ^ 2 / k => ...
- 【bzoj2721】[Violet 5]樱花
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2721 好久没做数学题了,感觉有些思想僵化,走火入魔了. 这道题就是求方程$ \frac ...
随机推荐
- 状压dp(B - 炮兵阵地 POJ - 1185 )
题目链接:https://cn.vjudge.net/contest/276236#problem/B 题目大意:略 具体思路:和我的上一篇写状压dp的思路差不多,不过就是这个题相当于上一个题的升级 ...
- weblogica 目录结构 简单介绍 创建domain domain所在目录
1. samples 创建过程略过 domain的目录 [weblogic@node2 base_domain]$ pwd /home/weblogic/Oracle/Middleware/Oracl ...
- linux中core dump开启使用教程【转】
转自:http://www.111cn.net/sys/linux/67291.htm 一.什么是coredump 我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各 ...
- Operfire 安装指南
http://www.cnblogs.com/hoojo/archive/2012/05/13/2498151.html 本文的英文原文来自 http://www.igniterealtime.org ...
- 使用DOS访问数据库详解
今天突发奇想,想是否可以用DOS命令来操作本地数据库或者连接其他外地数据库,网上搜了很多教程比较繁琐,自己想写一篇文章详细叙述一下,也为以后复习做点备份. 工具: 电脑 win7 64bit MySQ ...
- maxout激活函数
maxout的拟合能力是非常强的,它可以拟合任意的的凸函数.最直观的解释就是任意的凸函数都可以由分段线性函数以任意精度拟合(学过高等数学应该能明白),而maxout又是取k个隐隐含层节点的最大值,这些 ...
- SQl查询数据库库名,表名、表的列名
查询数据库 select * From master.dbo.sysdatabases where name='数据库名' and status<>512 --读取库中的所有表名 (当 ...
- loadrunner 脚本中文乱码
loadrunner 脚本中文乱码 1.新建脚本--->选择协议(Http)-->选项-->高级-->选择“支持字符集”并点选“UTF-8”: 2.在回放脚本之前:Vuser- ...
- Docker简介与安装(一)
Docker简介 Docker 是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎, 源代码托管在 GitHub 上, 基于Go语言并遵从Apache2.0协 ...
- iOS开发之app打包发布流程
一.准备工作 苹果开发者中心 1.申请苹果开发者账号 首先需要申请苹果开发者账号才能在APP store 里发布应用. 开发者账号分类:(1)个人开发者账号 (2)企业开发者账号 主要的区别是:点击这 ...
.gif)
.gif)
.gif)
.gif)