标签:除法 return gcd 18 代码 long 最大公约数 1040 CCF
免责声明:这道题的评测系统有BUG,有些样例用我的代码可能过不了,但我的思路以及代码是能AC通过此题的。
而且比较坑人的是:如果你用的是int类型的变量,可能只会得80分(我一开始也是这样),但一定要改成long long类型的,unsigned long long 没有必要但也可以用
| 思路
回归正题,这道题首先运用了最大公约数(辗转相除法求两个数的最大公约数,具体请见:https://www.cnblogs.com/elisa02/p/12784945.html)
辗转相除法求两个数的最大公约数代码:
long long gcd(long long m, long long n){ if(n == 0){ return m; }else{ return gcd(n,m%n); } }
最大公约数有个性质:两个数的最大公约数里包含了所有的共有的因子。可是这道题要求的是a是否包含了b的所有因子。即一个数除了最大公约数外还有别的因子,
比如,12和18的最大公约数是6,要看12是否包含了18的所有因子,18 / 6(18除了6以外还有一个因子3)= 3,要看6里是否也包含这个3就可以了,所以代码是:
c = gcd(a,b);//c就是例子里的6 b = b / c;//b赋值完以后就是3 if(c % b == 0){ cout << "Yes" << endl; }else{ cout << "No" << endl; }
| 代码
完整版代码:
#include<cmath> #include<cstdio> #include<iostream> using namespace std; long long gcd(long long m, long long n){ if(n == 0){ return m; }else{ return gcd(n,m%n); } } int main(){ long long a,b,c; cin >> a >> b; c = gcd(a,b);//c就是例子里的6 b = b / c;//b赋值完以后就是3 if(c % b == 0){ cout << "Yes" << endl; }else{ cout << "No" << endl; } return 0; }
标签:除法,return,gcd,18,代码,long,最大公约数,1040,CCF 来源: https://www.cnblogs.com/elisa02/p/14407193.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。