题目链接:http://codeforces.com/problemset/problem/900/D

题意:

  给定x,y,问你有多少个数列a满足gcd(a[i]) = x 且 ∑(a[i]) = y。

题解:

  由于gcd(a[i]) = x,所以y一定是x的倍数,否则无解。

  那么原题就等价于:问你有多少个数列a满足gcd(a[i]) = 1 且 ∑(a[i]) = y/x。

  设f(k)为gcd(a[i]) = 1 且 ∑(a[i]) = k时的答案。

  只满足条件∑(a[i]) = k的数列共有2^(k-1)种(隔板法)

  然后要从中去掉gcd不为1的数列。

  每个和为k且gcd不为1的数列a1,对应着一个和为k的因数且gcd为1的数列a2。

  因为a1可以由a2整体放大而来。

  那么也就是f(k) = 2^(k-1) - ∑ f(p),其中p为k的因数(p != k)。

  搜索 + map记忆化即可。

  由于需要用到的f(k),k均为y/x的因数,最多sqrt(y/x)个。

  加上map的log复杂度,所以总复杂度为O(sqrt(n)*log(n))。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
#define MOD 1000000007 using namespace std; int x,y;
map<int,int> mp; long long quick_pow(long long n,long long k)
{
long long ans=;
while(k>)
{
if(k&) ans=(ans*n)%MOD;
n=n*n%MOD;
k>>=;
}
return ans;
} long long dfs(int i)
{
if(i==) return ;
if(mp.count(i)) return mp[i];
long long ans=quick_pow(,i-);
for(int j=;j*j<=i;j++)
{
if(i%j==)
{
ans=((ans-dfs(j))%MOD+MOD)%MOD;
if(i/j!=j) ans=((ans-dfs(i/j))%MOD+MOD)%MOD;
}
}
ans=((ans-)%MOD+MOD)%MOD;
return mp[i]=ans;
} int main()
{
cin>>x>>y;
cout<<(y%x== ? dfs(y/x) : )<<endl;
}

Codeforces 900D Unusual Sequences:记忆化搜索的更多相关文章

  1. Codeforces 900D Unusual Sequences 容斥原理

    题目链接:900D  Unusual Sequences 题意: 给出两个数N,M.让你求数列(和为M,gcd为N)的个数. 题解: 首先,比较容易发现的是M%N如果不为零,那么一定不能构成这样的序列 ...

  2. CodeForces 173C Spiral Maximum 记忆化搜索 滚动数组优化

    Spiral Maximum 题目连接: http://codeforces.com/problemset/problem/173/C Description Let's consider a k × ...

  3. CodeForces 398B 概率DP 记忆化搜索

    题目:http://codeforces.com/contest/398/problem/B 有点似曾相识的感觉,记忆中上次那个跟这个相似的 我是用了 暴力搜索过掉的,今天这个肯定不行了,dp方程想了 ...

  4. CodeForces 132C Logo Turtle (记忆化搜索)

    Description A lot of people associate Logo programming language with turtle graphics. In this case t ...

  5. CodeForces 918D MADMAX(博弈+记忆化搜索)

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  6. Codeforces 667C Reberland Linguistics 记忆化搜索

    链接 Codeforces 667C Reberland Linguistics 题意 给你一个字符串,除去前5个字符串后,使剩下的串有长度为2或3的词根组成,相邻的词根不能重复.找到所有的词根 思路 ...

  7. CodeForces 900D Unusual Sequences

    题目链接: https://codeforces.com/contest/900/problem/D 题意 假设有distinct 正整数序列{a1,a2,,,an},满足gcd(a1, a2, .. ...

  8. Codeforces #564div2 E1(记忆化搜索)

    虽然不是正解但毕竟自己做出来了还是记下来吧- 对每个人分别dfs得到其期望,某两维的组合情况有限所以Hash一下避免了MLE. #include <cstdio> #include < ...

  9. Codeforces Gym 100231G Voracious Steve 记忆化搜索

    Voracious Steve 题目连接: http://codeforces.com/gym/100231/attachments Description 有两个人在玩一个游戏 有一个盆子里面有n个 ...

随机推荐

  1. python unittest不执行"if __name__ == '__main__' "问题(Pycharm)

    问题: 1.selenium导入unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.IDE为Pycharm 假设代码为: from selenium import w ...

  2. Xcode wifi连接真机调试

    设备环境:Mac OSX 10.12.5.iOS11.Xcode9 或以上版本 PS:这是WWDC2017的新功能,iOS11以上,Xcode9这是刚性要求.这个功能不好找,就记下来了 手机连接上Xc ...

  3. JAVA读取文件夹大小的几种方式

    (一)单线程递归方式 package com.taobao.test; import java.io.File; public class TotalFileSizeSequential { publ ...

  4. emacs的常用配置备份

    据说有人搞丢了自己的emacs的配置,然后一怒之下抛弃了emacs投身vim,我还是做个emacs配置的备份吧, 虽然我现在也算不上emacs的发烧友. 这里的配置大多是从网上参考的,最多的是下面的链 ...

  5. MIC性能优化策略

    MIC性能优化主要包括系统级和内核级:系统级优化包括节点之间,CPU与MIC之间的负载均衡优化:MIC内存空间优化:计算与IO并行优化:IO与IO并行优化:数据传递优化:网络性能优化:硬盘性能优化等. ...

  6. spring+mybatis基于 AOP实现业务日志管理

    最近在项目上用到了操作日志的相关,之前的解决方案就是自己写一个日志project,然后统一调用日志接口即可,这样方便自定义定制,因为有很多设备控制之类的都是需要确认一下的,但是,对数据的操作,比如,增 ...

  7. 文件大小转换(b,kb,M,GB/TB)

    //转换单位 setupSize(1111111111111); function setupSize($fileSize) { $size = sprintf("%u", $fi ...

  8. Leetcode - CopyWithRandomList

    Algorithm: Iterate and copy the original list first. For the random pointer, just copy the value fro ...

  9. python 基础 9.9 查询数据

      #/usr/bin/python #-*- coding:utf-8 -*- #@Time   :2017/11/24 4:21 #@Auther :liuzhenchuan #@File   : ...

  10. ArcGIS Scalebar 比例尺 充满div

    说明:本篇博文地图充满div,上一篇博文是充满整个body 运行效果: 2.HTML代码 <!DOCTYPE html> <html> <head> <met ...