zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 39 Editorial B(Euclid算法,连续-=与%=的效率)

    You have two variables a and b. Consider the following sequence of actions performed with these variables:

    1. If a = 0 or b = 0, end the process. Otherwise, go to step 2;
    2. If a ≥ 2·b, then set the value of a to a - 2·b, and repeat step 1. Otherwise, go to step 3;
    3. If b ≥ 2·a, then set the value of b to b - 2·a, and repeat step 1. Otherwise, end the process.

    Initially the values of a and b are positive integers, and so the process will be finite.

    You have to determine the values of a and b after the process ends.

    Input

    The only line of the input contains two integers n and m (1 ≤ n, m ≤ 1018). n is the initial value of variable a, and m is the initial value of variable b.

    Output

    Print two integers — the values of a and b after the end of the process.

    Examples
    input
    Copy
    12 5
    
    output
    0 1
    
    input
    Copy
    31 12
    
    output
    7 12
    
    Note

    Explanations to the samples:

    1. a = 12b = 5  a = 2b = 5  a = 2b = 1  a = 0b = 1;
    2. a = 31b = 12  a = 7b = 12.

    官方题解:

    The answer can be calculated very easy by Euclid algorithm (which is described in the problem statement), but all subtractions will be replaced by taking by modulo.

    题意:

    Euclid算法,和题意一样,我最开始是按照题目给的流程按部就班的写,a,b的范围为10^18,要开long long,但是在text3 10^18 7就TLE了。

    于是后面看到大佬的代码,以及官方题解,发现-=的话,效率会很低,改成%=即可。

    代码:

    #include<bits/stdc++.h>
    
    long long a, b; 
    int main(){
    
    	scanf("%lld %lld", &a, &b);
    	while(a && b){
    		if(a>=2*b) a%= 2*b;
    		else if(b>=2*a) b%=2*a;
    		else break;
    	}
    	printf("%lld %lld", a, b);
    }


  • 相关阅读:
    TextView 内容设置成上下滑动 和 代码设置字体颜色
    Android提供了4种在其他线程中访问UI线程的方法
    Android 左右滑屏效果
    【自定义控件】 GridView
    【动画】【特效】activity跳转华丽的过渡效果(转载)
    Android获取设备型号、SDK版本及其系统版本
    【JSON】数据解析
    Android中文API集合
    【AssetManager】的使用与资源预加载
    @property(nonatomic,retain)
  • 原文地址:https://www.cnblogs.com/wrjlinkkkkkk/p/9552019.html
Copyright © 2011-2022 走看看