最大用约束和最小公倍数的问题

图片说明

import java.io.*;
import java.util.*;

public class Main {
    static long Tra(long x,long y)
    {
        if(y==0)    {return x;}
        return Tra(y,x%y);
    }
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int count = 5;
        while(count-- >0){
            int x0 = sc.nextInt();
            int y0 = sc.nextInt();
            long ans = 0;
            for(int i = 1;i < Math.sqrt(x0*y0);i++){
                if((x0*y0) % i == 0 && Tra(i,(x0*y0) / i) == x0){
                    ans++;
                }
            }
            System.out.println(ans * 2);
        }


    }
}


首先,学到的是这一个dfs(好像是dfs),先说一下这一个函数方法,在主函数中,把i和sum除i的结果放进来,那么就进行递归。递归的出口是y==0.如果不是呢就继续进行递归,会发现,x、y的位置会互换。比如(1,180)第一次循环,变成(180,1),这样的话继续循环就变成了(1,0),结束递归,但是不符合条件,所以ans不变。再例如到(12,15)的时候,变成(15,12),(12,3),(3,3),最后是(3,0)结束递归。那么这样就得到3,符合条件,ans自加。不用全部算出来,只需要把ans*2即可得出全部结果。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务