xdu2017校赛F
Problem F Dogs of Qwordance Senior Backend R&D Engineers
问题描述
那年夏天,锘爷和杰师傅漫步在知春公园的小道上。他们的妻子、孩子牵 着狗在前面嬉戏,二人笑语盈盈,他们不深究一个小的编程问题,而是对整个 Qwordance (四字舞蹈)公司的发展前景加以描绘。这样的场景,想想就觉得好 美,想想就好向往,想想就好激动。然而,他们的狗觉得这非常的无聊,决定自 己去玩。 杰师傅的狗非常挑剔。它希望找到一块面积为 x 的长方形广场,还要求广 场的长和宽都是整数。锘爷的狗不屑地说:“这还不简单,总共有 σ0(x) 种方案 呢。”杰师傅的狗却摇了摇头说:“找到这个广场后,我们要在上面画上水平和垂 直的网格,使得水平、垂直网格之间的间距分别是相同的整数。算了这太难了, 我们去听他们讨论 Qwordance 未来发展大方向吧。”锘爷的狗说:“这也不难啊, 总共有,咦,多少方案啊?”杰师傅的狗鄙视道:“你看你连个方案数都算不出, 我不要和你玩了。像你这样的狗在朝鲜是会被做成狗肉火锅的。你走吧。”锘爷 的狗想去问锘爷的儿子(中关村小学生信息学竞赛冠军),然而怕被小主人嘲笑, 请你帮帮它吧。
输入格式 输入包含多组数据(最多 450 组),请处理到文件结束。
每组数据包含一个整数,即 x 。 对于所有数据有 1 ≤ x ≤ 1012。
输出格式 对于每组数据输出 1 行,包含面积为 x 的广场的方案数。
只要广场的长或 宽不同,或网格划分方案不同,就是不同的方案(见样例解释)。
输入输出样例 输入样例 输出样例
1 4
1 10
关键:令$\zeta (x)$=一个数的质因子的个数,$f(x)$为解的个数,
因为任何一个数可以按照唯一分解定理,分解为$x = \prod\limits_{i = 1}^k {{p_i}^{{a_i}}} $,${p_i}$为质数,
因此,$\zeta (x) = \prod\limits_{i = 1}^k {({a_i} + 1)}$,
$f(x) = \sum\limits_{d|n} {\prod\limits_{i = 1}^k {({a_i} + 1)*({c_i} - {a_i} + 1)} } $
$f(x) = \prod\limits_{i = 1}^k {\sum\limits_{j = 1}^{{a_i}} {(j + 1)({a_i} - j + 1)} } $(乘法原理)
注意:(1)分解质因数时,只需到$\sqrt n $即可,因为大于等于$\sqrt n $的质数最多只有一个,这时候,只需将结果乘4即可。
(2)分解素数的两种方法,埃氏筛法、线性筛法,其中线性筛法的复杂度更低,埃氏筛法可以舍弃了。
(3)时常注意优化复杂度(dalao的教导)
(4)ios::sync_with_stdio(false);可用于加快cin与cout的速度。
线性筛:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 10000001
ll prime[N+],k;
bool is_not_prime[N+]={true,true};
void sieve(){
for(ll i=;i<N;i++){
if(!is_not_prime[i]){
prime[k++]=i;
}
for(ll j=;j<k&&i*prime[j]<N;j++){
is_not_prime[i*prime[j]]=true;
if(i%prime[j]==) break;
}
}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 1000002
int prime[N+],p;
ll n;
bool is_prime[N+];
int index[N+];
void sieve(){
p=;
for(int i=;i<N;i++){
is_prime[i]=true;
}
is_prime[]=is_prime[]=false;
for(int i=;i<N;i++){
if(is_prime[i]){
prime[p++]=i;
for(int j=*i;j<N;j+=i){
is_prime[i]=false;
}
}
}
}//埃筛
/*void sieve(){
is_prime[1]=1;
for(ll i=2;i<N;++i){
if(!is_prime[i])prime[p++]=i;
for(ll j=0;j<p&&prime[j]*i<N;++j){
is_prime[prime[j]*i]=1;
if(i%prime[j]==0)break;
}
}
}*/
//线性筛 int main(){
ios::sync_with_stdio(false);
sieve();
while(cin>>n){
ll ans=;
for(int i=;1ll*prime[i]*prime[i]<=n;i++){
if(n%prime[i]==){
ll index=,part=;
while(n%prime[i]==){
n/=prime[i];
index++;
}
for(ll j=;j<=index;j++) part+=(j+)*(index-j+);
ans*=part;
}
}if(n!=) ans*=;
cout<<ans<<endl;
}
return ;
}
xdu2017校赛F的更多相关文章
- 校赛F
问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...
- 校赛F 比比谁更快(线段树)
http://acm.cug.edu.cn/JudgeOnline/problem.php?cid=1153&pid=5 题意:给你一个字符串,各两个操作: ch=0,[l,r]降序 ch=1 ...
- 浙江理工2015.12校赛-F Landlocked
Landlocked Time Limit: 5 Sec Memory Limit: 128 MB Submit: 288 Solved: 39 Description Canada is not a ...
- 上海高校金马五校赛 F题:1 + 2 = 3?
链接:https://www.nowcoder.com/acm/contest/91/F来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言26214 ...
- 广州工业大学2016校赛 F 我是好人4 dfs+容斥
Problem F: 我是好人4 Description 众所周知,我是好人!所以不会出太难的题,题意很简单 给你n个数,问你1000000000(含1e9)以内有多少个正整数不是这n个数任意一个的倍 ...
- 北邮校赛 F. Gabriel's Pocket Money(树状数组)
F. Gabriel's Pocket Money 2017- BUPT Collegiate Programming Contest - sync 时间限制 2000 ms 内存限制 65536 K ...
- 线性期望(BUPT2015校赛.F)
将整体期望分成部分期望来做. F. network 时间限制 3000 ms 内存限制 65536 KB 题目描述 A social network is a social structure mad ...
- 2018年东北农业大学春季校赛 F wyh的集合【思维】
链接:https://www.nowcoder.com/acm/contest/93/F来源:牛客网 题目描述 你们wyh学长给你n个点,让你分成2个集合,然后让你将这n个点进行两两连接在一起,连接规 ...
- 西交校赛 F. GZP and Poker
F. GZP and Poker GZP often plays games with his friends.Today they went to a board game.There are n ...
随机推荐
- UVA - 10870 Recurrences 【矩阵快速幂】
题目链接 https://odzkskevi.qnssl.com/d474b5dd1cebae1d617e6c48f5aca598?v=1524578553 题意 给出一个表达式 算法 f(n) 思路 ...
- [原创]java WEB学习笔记10:GenericServlet
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 20145229吴姗珊 《Java程序设计》两天小总结
20145229吴姗珊 <Java程序设计>两天小总结 教材学习内容总结 第十章 输入\输出 1.java将输入\输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象 2.从应用程序 ...
- 动态顺序表(C++实现)
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构. 这样的存储方式使得线性表逻辑上相邻的元素,其在物理存储单元中也是相邻的.只要知道了第一个元素的 ...
- SiteServer CMS 5.0 源码入门
开发者中心 STL 语言 文 档 博 客 论 坛 Github 二次开发 提示:文档中心正在完善中,我们将不断发布新文档,敬请期待... 新手入门 SiteServer CMS 能做什么 Site ...
- 第二天(1)声明式验证之使用验证框架验证域模型和ModelDriven验证
有一类特殊的属性,即这个属性的类型是另外一个JavaBean,如有一个User类,代码如下: package data; public class User { private String name ...
- linux dd、echo 、watch、fuser命令
一.dd命令 以数据流进行复制,cp命令则是以文件为单位进行复制 if=数据来源 of=数据存储目标 bs=# 复制的字节数 count=# 复制几个bs seek=# 跳过多 ...
- linux命令学习笔记(17):whereis 命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和 源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度 ...
- 【leetcode刷题笔记】N-Queens
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...
- sql根据坐标算距离
CREATE FUNCTION ConvertXYToDistance(@la1 DECIMAL,@lo1 DECIMAL,@la2 DECIMAL,@lo2 DECIMAL)RETURNS FLOA ...