Educational Codeforces Round 26 E - Vasya's Function
数论题还是好恶心啊。
题目大意:给你两个不超过1e12的数 x,y,定义一个f ( x, y ) 如果y==0 返回 0 否则返回1+ f ( x , y - gcd( x , y ) );
思路:我们设gcd ( x , y) 为G,那么 设 x = A*G,y = B*G,我们考虑减去多少个G时x y 的gcd会改变,我们设减去
k个G的时候 x和y 的gcd为改变,即 A*G 和 ( B - k ) * G 的 gcd 改变了,什么情况下会改变呢,就是A 和( B - k )的gcd
不为 1 ,这样我们就不断地找出 k 就能得出答案。那么现在问题变成了怎么快速地求出 k ,我们设 A 中的某个因子为
r,则( B - k )%r == 0 , 设( B - k ) / r的商为 q ,则 B - k = q * r 变形一下变成,B = k + q * r ,两边对 r 取余,B % r = k
这样我们就能用 B 和 A中的质因数求出 k ,那么我们每次需要记录的就是,B 是 A和B的gcd 的多少倍就,以及A的没有被
用过的质因数。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll a,b,ans=;
vector<ll> va;
void work(ll y)// y值表示目前 b的值为 gcd(a,b)的y倍。
{
if(y==) return;
ll k=y;
for(int i=;i<va.size();i++)
{
k=min(k,y%va[i]);
}
ans+=k;y-=k;
vector<ll> vb;
for(int i=;i<va.size();i++)
{
if(y%va[i]==) y/=va[i];
else vb.push_back(va[i]);//没有用过的a的质因数。
}
va=vb;
work(y);
}
int main()
{
cin>>a>>b;
ll gcd=__gcd(a,b);
a/=gcd;b/=gcd;//保证了a和b没有公共的因子。
for(ll i=;i*i<=a;i++)
{
while(a%i==)
{
va.push_back(i);
a/=i;
}
}
if(a>) va.push_back(a);
for(int i=;i<va.size();i++) printf("%d ",va[i]);
work(b);
cout<<ans<<endl;
return ;
}
Educational Codeforces Round 26 E - 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( ...
- Educational Codeforces Round 26
Educational Codeforces Round 26 困到不行的场,等着中午显示器到了就可以美滋滋了 A. Text Volume time limit per test 1 second ...
- CodeForces 837F - Prefix Sums | Educational Codeforces Round 26
按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforc ...
- CodeForces 837D - Round Subset | Educational Codeforces Round 26
/* CodeForces 837D - Round Subset [ DP ] | Educational Codeforces Round 26 题意: 选k个数相乘让末尾0最多 分析: 第i个数 ...
- Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya's Function ] [ F. Prefix Sums ]
PROBLEM D - Round Subset 题 OvO http://codeforces.com/contest/837/problem/D 837D 解 DP, dp[i][j]代表已经选择 ...
- Educational Codeforces Round 13 D. Iterated Linear Function 水题
D. Iterated Linear Function 题目连接: http://www.codeforces.com/contest/678/problem/D Description Consid ...
- Educational Codeforces Round 13 D. Iterated Linear Function (矩阵快速幂)
题目链接:http://codeforces.com/problemset/problem/678/D 简单的矩阵快速幂模版题 矩阵是这样的: #include <bits/stdc++.h&g ...
- Educational Codeforces Round 26 B,C
B. Flag of Berland 链接:http://codeforces.com/contest/837/problem/B 思路:题目要求判断三个字母是否是条纹型的,而且宽和高相同,那么先求出 ...
- Educational Codeforces Round 54 E. Vasya and a Tree(树上差分数组)
https://codeforces.com/contest/1076/problem/E 题意 给一棵树(n<=3e5),m(3e5)次查询,每次查询u,d,x,表示在u的子树中,给距离u&l ...
随机推荐
- The android command is deprecated
新版的SDK tools中的android命令已经不支持 android create project,用起来很不顺手. The "android" command is depr ...
- collocation
a collocation is two or more words that often go together. These combination just sound "right& ...
- 第18月第25天 github下载单个文件夹 git命令
1. 用 SVN 即可. 举例说明: 譬如这个项目: Mooophy/Cpp-Primer · GitHub, 我只想看 ch03 文件夹的代码怎么办? 先打开 ch03, 其 URL 为: &quo ...
- 【BUG】websphere找不到类或jar包冲突
来自:http://liuwei1578.blog.163.com/blog/static/49580364200991572642653/ Jar包冲突问题是在大型Java软件开发中经常遇到的问题, ...
- HTML学习笔记01-HTML简介
主要是为了做接口测试,试着自己写爬虫,所以学习一下HTML一些基础的东西,方便用来解析网页.学习内容主要来自菜鸟教程的HTML教程,W3school的HTML 超文本标记语言(英语:HyperText ...
- dns轮询
负载均衡最开始一步,利用它实现负载均衡集群的定位
- Ex 5_26 变量约束是否能同时满足(并查集)_第九次作业
利用并查集进行处理,定义一个维护数组components,components[i]表示变量序号为i的变量所处的集合,首先处理相等的变量,把它们放入同一个集合中,最后再处理不相等变量,若两个不相等的变 ...
- HashMap Hashtable LinkedHashMap 和TreeMap
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的 ...
- PYTHON-面向对象 继承 派生
1. 什么是继承 继承是一种新建类的方式,新建的类称之为子类/派生类,被继承的类称之为父类/基类/超类 继承有3个特点: 1. 子类可以遗传/重用父类的属性(解决类与类之间代码冗余的问题) 2. 在p ...
- javascript之随手笔记
1.toFixed()方法 toFixed() 方法可把 Number 四舍五入为指定小数位数的数字. 链接 2..在js中,{}等于new Object(),都是在堆中创建一块区域