dp(a,b,c,p) = sigma ( dp(a/p^i,b/p^j,c/p^k) * ( 1+i+j+k) )

表示用小于等于p的素数去分解的结果有多少个

E. Number Challenge
time limit per test

3 seconds

memory limit per test

512 megabytes

input

standard input

output

standard output

Let's denote d(n) as the number of divisors of a positive integer n.
You are given three integers ab and c.
Your task is to calculate the following sum:

Find the sum modulo 1073741824 (230).

Input

The first line contains three space-separated integers ab and c (1 ≤ a, b, c ≤ 2000).

Output

Print a single integer — the required sum modulo 1073741824 (230).

Sample test(s)
input
2 2 2
output
20
input
4 4 4
output
328
input
10 10 10
output
11536
Note

For the first example.

  • d(1·1·1) = d(1) = 1;
  • d(1·1·2) = d(2) = 2;
  • d(1·2·1) = d(2) = 2;
  • d(1·2·2) = d(4) = 3;
  • d(2·1·1) = d(2) = 2;
  • d(2·1·2) = d(4) = 3;
  • d(2·2·1) = d(4) = 3;
  • d(2·2·2) = d(8) = 4.

So the result is 1 + 2 + 2 + 3 + 2 + 3 + 3 + 4 = 20.


import java.util.*;

public class CF235E {

	class Triple {

		Triple(){}

		Triple(int _x,int _y,int _z) {
this.x=_x; this.y=_y; this.z=_z;
this.sort();
} public int x,y,z; void sort() {
if(this.z<this.y) {
int t = this.z;
this.z=this.y;
this.y=t;
}
if(this.z<this.x) {
int t=this.x;
this.x=this.z;
this.z=t;
}
if(this.y<this.x) {
int t=this.x;
this.x=this.y;
this.y=t;
}
} @Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + getOuterType().hashCode();
result = prime * result + x;
result = prime * result + y;
result = prime * result + z;
return result;
} @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Triple other = (Triple) obj;
if (!getOuterType().equals(other.getOuterType()))
return false;
if (x != other.x)
return false;
if (y != other.y)
return false;
if (z != other.z)
return false;
return true;
} private CF235E getOuterType() {
return CF235E.this;
}
} int a,b,c;
final int mod = 1073741824 ; int[] primes = new int[350];
int pn=0; boolean[] vis = new boolean[2200]; Map[] map = new Map[333];
void init() {
for(int i=2;i<=2100;i++) {
if(vis[i]==false) {
primes[pn++]=i;
for(int j=2*i;j<=2100;j+=i)
vis[j]=true;
}
}
for(int i=0,j=pn-1;i<=j;i++,j--) {
int t=primes[i];
primes[i]=primes[j];
primes[j]=t;
}
for(int i=0;i<333;i++)
map[i]=new HashMap<Triple,Integer>();
} long gao(int deep,Triple tri) { if(deep==pn) return 1; if(map[deep].get(tri)!=null) return (long) map[deep].get(tri);
long ret=0; int p=primes[deep]; for(int x=tri.x,i=0;x!=0;x/=p,i++) {
for(int y=tri.y,j=0;y!=0;y/=p,j++) {
for(int z=tri.z,k=0;z!=0;z/=p,k++) {
ret+=gao(deep+1,new Triple(x,y,z))*(i+j+k+1)%mod;
if(ret>=mod) {
ret-=mod;
}
}
}
}
map[deep].put(tri, ret);
return ret;
} CF235E(){
init();
Scanner in = new Scanner(System.in);
a=in.nextInt(); b=in.nextInt(); c=in.nextInt();
System.out.println(gao(0,new Triple((int)a,(int)b,(int)c)));
} public static void main(String[] args) {
new CF235E();
}
}

Codeforces 235E. Number Challenge DP的更多相关文章

  1. Codeforces 235E Number Challenge

    http://codeforces.com/contest/235/problem/E 远距离orz......rng_58 证明可以见这里(可能要FQ才能看到) 还是copy一下证明吧: 记 $$f ...

  2. CodeForces 235E Number Challenge (莫比乌斯反演)

    题意:求,其中d(x) 表示 x 的约数个数. 析:其实是一个公式题,要知道一个结论 知道这个结论就好办了. 然后就可以解决这个问题了,优化就是记忆化gcd. 代码如下: #pragma commen ...

  3. codeforces Hill Number 数位dp

    http://www.codeforces.com/gym/100827/attachments Hill Number Time Limits:  5000 MS   Memory Limits: ...

  4. Codeforces 251C Number Transformation DP, 记忆化搜索,LCM,广搜

    题意及思路:https://blog.csdn.net/bossup/article/details/37076965 代码: #include <bits/stdc++.h> #defi ...

  5. CF#235E. Number Challenge

    传送门 可以理解为上一道题的扩展板.. 然后我们就可以YY出这样一个式子 ${\sum_{i=1}^a\sum_{j=1}^b\sum_{k=1}^cd(ijk)=\sum_{i=1}^a\sum_{ ...

  6. Easy Number Challenge(暴力,求因子个数)

    Easy Number Challenge Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I ...

  7. Codeforces Avito Code Challenge 2018 D. Bookshelves

    Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...

  8. 多校5 HDU5787 K-wolf Number 数位DP

    // 多校5 HDU5787 K-wolf Number 数位DP // dp[pos][a][b][c][d][f] 当前在pos,前四个数分别是a b c d // f 用作标记,当现在枚举的数小 ...

  9. Codeforces 235E

    Codeforces 235E 原题 题目描述:设\(d(n)\)表示\(n\)的因子个数, 给定\(a, b, c\), 求: \[\sum_{i=1}^{a} \sum_{j=1}^{b} \su ...

随机推荐

  1. 使用js获取浏览器地址栏里的参数

    用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new ...

  2. Spark笔记之累加器(Accumulator)

    一.累加器简介 在Spark中如果想在Task计算的时候统计某些事件的数量,使用filter/reduce也可以,但是使用累加器是一种更方便的方式,累加器一个比较经典的应用场景是用来在Spark St ...

  3. springboot整合rabbirmq(3.7.9)中使用mandatory参数获取匹配失败的消息以及存入rabbitmq备份交换器中!

    先说下这个参数的作用: /** * Mandatory为true时,消息通过交换器无法匹配到队列会返回给生产者 * 为false时,匹配不到会直接被丢弃 */在一些特定场景下还是有用处的!接下来说一下 ...

  4. C#排队处理DEMO

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. oracle任务job

    1)创建测试表 1 create table test1(a date); 2)创建存储过程 1 2 3 4 5 create or replace procedure myproc as begin ...

  6. 使用SpringCloud搭建高可用服务注册中心

    我们需要的,不仅仅是一个服务注册中心而已,而是一个高可用服务注册中心. 上篇博客中我们介绍了如何使用Spring Cloud搭建一个服务注册中心,但是搭建好的服务注册中心是一个单节点的服务注册中心,这 ...

  7. MongoDB:数据导入CSV文件之错误记录

    测试主机1:Windows 10,MongoDB 3.6.3,WPS 10.1,Notepad++ 7.5.3, 测试主机2:Ubuntu 16.04,MongoDB 4, 今天测试了将数据从文件—— ...

  8. java虚拟机规范(se8)——java虚拟机结构(五)

    2.10 异常 java虚拟机中的异常用Throwable类或者它的子类的实例来表示.抛出一个异常会导致立即非本地(an inmediate nolocal)的控制转移,从发生异常的地方跳到处理异常的 ...

  9. Linux下的snmpd.conf配置说明

    SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理.在RHEL中,SNMP的配置文件地址是/ ...

  10. Spring Boot 实战与原理分析视频课程

    Spring Boot 实战与原理分析视频课程 链接:https://pan.baidu.com/share/init?surl=PeykcoeqZtd1d9lN9V_F-A 提取码: 关注公众号[G ...