zoukankan      html  css  js  c++  java
  • 【解题报告】洛谷P1072 Hankson 的趣味题

    【解题报告】洛谷P1072 Hankson 的趣味题

    题目链接

    https://www.luogu.com.cn/problem/P1072

    思路

    这道题目我们首先直接模拟,可以得到50pts的高分

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <cmath>
    using namespace std;
    int T; 
    int gcd(int a,int b)
    {
    	return b? gcd(b,a%b):a; 
    }
    int lcm(int a,int b)
    {
    	return 1ll*a*b/gcd(a,b);
    }
    int main()
    {
    	cin>>T;
    	while(T--)
    	{
    		int a0,a1,b0,b1;
    		int cnt=0;
    		cin>>a0>>a1>>b0>>b1;
    		for(int i=1;i<=max(a1,b1);i++)
    		{
    			if(gcd(i,a0)==a1&&lcm(i,b0)==b1)
    			cnt++;
    		}
    		cout<<cnt<<'
    ';
    	}
    	return 0;
    }
    

    然后发现可以提前判断一下能不能有,于是我们得到了80pts的高分

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <cmath>
    using namespace std;
    int T; 
    int gcd(int a,int b)
    {
    	return b? gcd(b,a%b):a; 
    }
    int lcm(int a,int b)
    {
    	return 1ll*a*b/gcd(a,b);
    }
    int main()
    {
    	cin>>T;
    	while(T--)
    	{
    		int a0,a1,b0,b1;
    		int cnt=0;
    		cin>>a0>>a1>>b0>>b1;
    		if(b1%a1!=0)
    		{
    			cout<<0<<'
    ';
    			continue;
    		}
    		bool flag=false;
    		int add=1;
    		//cout<<"They are :";
    		for(int i=1;i<=max(a1,b1);i+=add)
    		{
    			if(b1%i==0)
    			{
    				if(gcd(i,a0)==a1&&lcm(i,b0)==b1)
    				{
    				//	cout<<i<<" ";
    					if(!flag)
    					add=i,flag=true;
    					cnt++;
    				}
    			}
    		}
    		//cout<<'
    ';
    		cout<<cnt<<'
    ';
    	}
    	return 0;
    }
    

    最后我们正经分析

    我们可以把 (lcm) 变成 (gcd) ,然后最大公约数可以直接同除

    把他们的最大公约数变成一

    然后再枚举,就快多了

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <cmath>
    using namespace std;
    int T; 
    int gcd(int a,int b)
    {
    	return b? gcd(b,a%b):a; 
    }
    int lcm(int a,int b)
    {
    	return 1ll*a*b/gcd(a,b);
    }
    int main()
    {
    	cin>>T;
    	while(T--)
    	{
    		int a0,a1,b0,b1;
    		int cnt=0;
    		cin>>a0>>a1>>b0>>b1;
    		if(b1%a1!=0)
    		{
    			cout<<0<<'
    ';
    			continue;
    		}
    		bool flag=false;
    		int add=1;
    		//cout<<"They are :";
    		for(int i=1;i*i<=b1;i++)
    		{
    			if(b1%i==0)
    			{
    				if(i%a1==0&&gcd(i/a1,a0/a1)==1&&gcd(b1/b0,b1/i)==1)
    				cnt++;
    				int j=b1/i;
    				if(i==j) continue;
    				if(j%a1==0&&gcd(j/a1,a0/a1)==1&&gcd(b1/b0,b1/j)==1)
    				cnt++;
    			}
    		}
    		//cout<<'
    ';
    		cout<<cnt<<'
    ';
    	}
    	return 0;
    }
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    关于wepy小程序图片显示问题
    输入地址到页面显示发生了写什么?
    一次Debug过程的思考
    一次冗长繁琐的排错经历
    PHP内核探索之变量(7)- 不平凡的字符串
    PHP内核探索之变量(6)- 后续内核探索系列大纲备忘
    PHP内核探索之变量(5)- session的基本原理
    PHP内核探索之变量(4)- 数组操作
    PHP内核探索之变量(3)- hash table
    PHP内核探索之变量(2)-理解引用
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15404837.html
Copyright © 2011-2022 走看看