Codeforces 837E. Vasya's Function
题意:
- f(a, 0) = 0;
- f(a, b) = 1 + f(a, b - gcd(a, b))
- 输出f(a,b)
a=A*gcd(a,b) b=B*gcd(a,b)
一次递归后,变成了 f(A*gcd(a,b),(B-1)*gcd(a,b))
若gcd(A,(B-1))=1,那么 这一层递归的gcd(a,b)仍等于上一层递归的gcd(a,b)
也就是说,b-gcd(a,b),有大量的时间减的gcd(a,b)相同,
若计算出减了S次相同的gcd(a,b)
那就可以直接由f(a,b)到 f(a,b-S*gcd(a,b))+ S
设T是A的任意因子
那么S满足 (B-S)%T=0,且S最小
移项得 S=B%T
即S是B对A的所有因子取模得到的数中最小的那个
新的一次递归中,
a ' =a,b ' =(B-S)*gcd(a,b),gcd ' = gcd*T
如何得到T和S?
枚举所有因子会TLE
我们发现,整个过程a始终没有改变,只是参与了求gcd
对于输入的a,b
令A=a/gcd(a,b),B=b/gcd(a,b)
这样A,B 就没有公因子
这样 原来的b-S*gcd 相当于 现在的B-S
求出A的所有素因子
因为A为定值,所以下一次求S用A的素因子时,可以从上一次求S用的A的素因子剩下的里选
就是说
如果这次某个因子是B的因子,那么下一次就不会用这个因子了,B/=这个因子
即这个因子参与构成新的gcd
如果这次某个因子不是B的因子,下一次就可以考虑它
#include<vector>
#include<iostream>
using namespace std;
typedef long long LL;
LL ans;
vector<LL>p;
vector<LL> :: iterator it;
LL gcd(LL a,LL b) { return !b ? a:gcd(b,a%b); }
void work(LL y)
{
if(!y) return;
LL k=y;
for(it=p.begin();it!=p.end();++it) k=min(k,y%(*it));
ans+=k; y-=k;
vector<LL>q;
for(it=p.begin();it!=p.end();++it)
if(y%(*it)) q.push_back(*it);
else y/=(*it);
swap(p,q);
work(y);
}
int main()
{
LL a,b;
cin>>a>>b;
LL g=gcd(a,b);
a/=g; b/=g;
for(LL i=;i*i<=a;i++)
while(a%i==)
{
p.push_back(i);
a/=i;
}
if(a>) p.push_back(a);
work(b);
cout<<ans;
}
1 second
256 megabytes
standard input
standard output
Vasya is studying number theory. He has denoted a function f(a, b) such that:
- f(a, 0) = 0;
- f(a, b) = 1 + f(a, b - gcd(a, b)), where gcd(a, b) is the greatest common divisor of a and b.
Vasya has two numbers x and y, and he wants to calculate f(x, y). He tried to do it by himself, but found out that calculating this function the way he wants to do that might take very long time. So he decided to ask you to implement a program that will calculate this function swiftly.
The first line contains two integer numbers x and y (1 ≤ x, y ≤ 1012).
Print f(x, y).
3 5
3
6 3
1
Codeforces 837E. Vasya's Function的更多相关文章
- CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26
/* CodeForces - 837E - Vasya's Function [ 数论 ] | Educational Codeforces Round 26 题意: f(a, 0) = 0; f( ...
- Codeforces 837E Vasya's Function - 数论
Vasya is studying number theory. He has denoted a function f(a, b) such that: f(a, 0) = 0; f(a, b) = ...
- Codeforces 837E Vasya's Function 数论 找规律
题意:定义F(a,0) = 0,F(a,b) = 1 + F(a,b - GCD(a,b).给定 x 和 y (<=1e12)求F(x,y). 题解:a=A*GCD(a,b) b=B*GCD(a ...
- 递推DP URAL 1353 Milliard Vasya's Function
题目传送门 /* 题意:1~1e9的数字里,各个位数数字相加和为s的个数 递推DP:dp[i][j] 表示i位数字,当前数字和为j的个数 状态转移方程:dp[i][j] += dp[i-1][j-k] ...
- ural 1353. Milliard Vasya's Function(背包/递归深搜)
1353. Milliard Vasya's Function Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning ma ...
- ural 1353. Milliard Vasya's Function(dp)
1353. Milliard Vasya's Function Time limit: 1.0 second Memory limit: 64 MB Vasya is the beginning ma ...
- CodeForces 840A - Leha and Function | Codeforces Round #429 (Div. 1)
/* CodeForces 840A - Leha and Function [ 贪心 ] | Codeforces Round #429 (Div. 1) A越大,B越小,越好 */ #includ ...
- Vasya's Function CodeForces - 837E (gcd)
大意: 给定$a,b$, $1\le a,b\le 1e12$, 定义 $f(a,0)=0$ $f(a,b)=1+f(a,b-gcd(a,b))$ 求$f(a,b)$. 观察可以发现, 每次$b$一定 ...
- Codeforces 837 E Vasya's Function
Discription Vasya is studying number theory. He has denoted a function f(a, b) such that: f(a, 0) = ...
随机推荐
- mybatis快速入门(二)
这次接着上次写增删改查吧. 现将上节的方法改造一下,改造测试类. package cn.my.test; import java.io.IOException; import java.io.Inpu ...
- _vimrc 的配置
windows set nocompatible set guifont=Consolas:h17 color molokai set backspace=2 set sts=4 set ts=4 s ...
- [Luogu3425][POI2005]KOS-Dicing
题面戳这 题目描述 Dicing is a two-player game and its outcome is fully random. Lately its popularity increas ...
- XCTF(77777-2)
题目链接:http://47.52.137.90:20000 这道题目和前面的那道题目大致一样,只不过是过滤的函数不一样 检查过滤函数的方式就不写了,直接来解题 检查函数发现过滤了ord ascii ...
- js命名中的关键字整理
- Redis分布式锁的正确实现方式
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...
- nodejs-url网址解析的好帮手
HTTP协议中url和uri的区别. 每个url都是uri,但是不是每个uri都是url. URI:是统一资源的标识符,web上可用的每种资源如HTML文档.图像.视频片段.程序等都是一个URI来定位 ...
- 用jquery实现日期控件
用jquery实现的日期控件,代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- linux PMBus总线及设备驱动分析
PMBus协议规范介绍 PMBus是一套对电源进行配置.控制和监控的通讯协议标准.其最新版本为1.3,该规范还在不断演进中,比如新标准中新增的zone PMBus.AVSBus等特性.在其官网上有详细 ...
- eclipse的Debug模式下的快捷键
主要快捷键: F5, F6, F7, F8的使用 F5: 进入当前方法 F6: 一步步执行 F7: 跳出方法, 返回到调用此方法的最后一条语句 F8: 继续执行,跳转到下一个断点的位置 示例: 在 ...