1. 程式人生 > >Codeforces 837E Vasya's Function:數論入門初步

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,b),那麼b-GCD(a,b) = (B-1)*GCD(a,b),如果此時A和B-1依然互質,那麼GCD不變下一次還是要執行b-GCD(a,b)。那麼GCD什麼時候才會變化呢?就是說找到一個最小的S,使得(B-S)%T=0其中T是a的任意一個因子。變形得到:B%T=S於是我們知道S=min(B%T)。也就是說b剪掉了S次相同的一個GCD之後,ab有了新的GCD。新的GCD等於原來的GCD*T,可以把a、b都/T,同時GCD*T,這樣問題化歸為上述同樣的問題,進行迭代。

Code:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main() {
	LL x, y;
	cin >> x >> y;
	LL g = __gcd(x, y);
	x /= g, y /= g;
	vector<LL> a;
	for (LL i = 2; i * i <= x; ++ i) {
		while (x % i == 0) {
			x /= i;
			a.push_back(i);
		}
	}
	if (x > 1) a.push_back(x);
	LL ans = 0;
	while (y) {
		LL g = y;
		for (LL i : a) {
			g = min(g, y % i);
		}
		ans += g;
		y -= g;
		vector<LL> b;
		for (LL i : a) {
			if (y % i == 0) {
				y /= i;
			}
			else {
				b.push_back(i);
			}
		}
		a.swap(b);
	}
	cout << ans << endl;
}


相關推薦

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,b),那麼b-GCD(a,b) = (B-1)*GCD(a,b),如果此

CodeForces - 837E - Vasya's Function | Educational Codeforces Round 26

mes def using pac main code names codeforce ces /* CodeForces - 837E - Vasya‘s Function [ 數論 ] | Educational Codeforces Round 26 題意

Educational Codeforces Round 26-E-Vasya's Function(思維)

題意:見體面,就是求f(x,y)題解:假如我們模擬遞推肯定炸,因為x和y有1e12這麼大,因此我們要看看這裡邊是否存在著無用功,首先因為每次b都會減掉一個gcd(a,b),我們可以將a和b分別寫成x1*

codeforces837E Vasya's Function

設f(x,y),若y=0,則f(x,0)=0,否則f(x,y)=f(x,y-gcd(x,y))。 資料範圍是1<=x,y<=1012所以不能指望暴力(沒錯,3點就會T) 那麼來分析一下。 不妨設x=A·gcd(x,y),y=B·gcd(

CF837E-Vasya's Function

time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandar

HOJ 10444 The milliard Vasya's function(簡單揹包)

在不大於1000000000的數裡,各個數位上的數字之和為s的數有多少個。 很容易想到通過揹包來做,但是如果只是簡單按數位遞推,如何排除0112和112這種重複的情況呢? 處理的辦法是不把0作為物品,但位數i不僅僅從i-1遞推,而是從0到i-1都要統計進來。 #includ

Milliard Vasya's Function(Ural_1353)

Vasya is the beginning mathematician. He decided to make an important contribution to the science and to become famous all over the

字首和的處理入門————codeforces 1016c——Vasya And The Mushrooms

題意: Vasya's house is situated in a forest, and there is a mushroom glade near it. The glade consists of two rows, each of which can be di

TimusOJ - 1353. Milliard Vasya's Function(DP)

TimusOJ - 1353. Milliard Vasya’s Function(DP) 題目連結 題目 求1到109 ( [1, 109] )中各位數字之和為S的數有多少個; 解析 這個題目和LeetCode - 518. Coin Change 2非常的相

codeforces 850B Round #432 Div2D & Div1B數論+計數

題意:給出n(<=5e5)個數字,每個數字在[ 1 , 1e6 ]範圍內,定義bad為:1、序列非空;2、所有數字的GCD=1.現在有兩種操作:1、刪除某個數字,花費是x。2、給某個數字+1,花費為y,一個數字可以被加很多次。請求出讓這個序列變成good(非bad)的

day39-Spring 12-Spring的JDBC模板快速入門

pri 哪些 困難 ces 5.0 使用 只需要 common commons Spring AOP的關鍵是它的底層的原理和思想,配置和使用並不是十分困難.AOP本身就是一個思想,是面向對象的延伸,不是用來替換面向對象的,而是用來解決面向對象中的一些問題的.在最初的時候提出

Java學習HTML入門

網頁 重置 自我介紹 回滾 標簽 color 公式 target coord HTML HTML基本標簽 <html> --html開始標簽 <head> -- 文件頭(用戶在瀏覽器的主體是看不到的) </head> <bo

Codeforces 822D My pretty girl Noora(數論)

view using cout prim pretty space actor true 因子 題目大意:一場選美比賽有N個人,可以分成N/x,每組x人。每組的比較次數為x(x-1)/2,f[N]為最後決出冠軍所需的比較次數,可以通過改變x的值使f[N]改變。題目給出t,l

總結數論 素數

如果 mil rdo return urn 因子 素數 高效 rand 素數判定算法,經典的Rabin Miller測試,通過二次探測的方法,可以將其正確率上升到一個很高的高度。 $O(1)$的快速乘。 在一些卡常數而且爆long long的取余問題中用到快速乘。

JAVA通信系列三Netty入門總結

hand list code end @override ada 群發消息 -s object 一、Netty學習資料 書籍《Netty In Action中文版》 對於Netty的十一個疑問http://news.cnblogs.com/n/205413/ 深入淺出Net

Codeforces 837D Round Subset - 動態規劃 - 數論

boolean codec clu program har ray cte zeros ets Let‘s call the roundness of the number the number of zeros to which it ends. You have

phonegap入門學習

evb dem phone ref shm odk aof cli nsh %E5%85%B3%E4%BA%8Ebitmapconfig%E7%9A%84%E4%B8%8D%E8%A7%A3%E5%95%8A ?????????????????? ?????????

(轉)Android開發書籍推薦入門到精通系列學習路線書籍介紹

成長 程序員 理論 targe base 官方 app als 自己的 Android開發書籍推薦:從入門到精通系列學習路線書籍介紹 轉自:http://blog.csdn.net/findsafety/article/details/52317506 很多時候我們都會

Codeforces 148D Bag of mice概率dp 記憶化搜索

include lac font eof i+1 cnblogs href 都沒有 color 題目鏈接:http://codeforces.com/problemset/problem/148/D 題意:   一個袋子中有w只白老鼠,b只黑老鼠。   公主和龍輪流從袋子裏

[Codeforces 841C]Leha and Function

its 得出 數列 原來 struct != using %d span 題目大意:定義函數F(n,k)為[1,2,3,..n]中k個元素的子集中最小元素的數學期望。現在給你兩個長度相等的數列A,B(A中元素嚴格大於B中元素),現在要你重新排列A,使得$\sum\limit