前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >codeM美团编程大赛初赛B轮D题(考验你的数学思维!)

codeM美团编程大赛初赛B轮D题(考验你的数学思维!)

作者头像
xiaoxi666
发布2018-10-29 17:31:36
4590
发布2018-10-29 17:31:36
举报
文章被收录于专栏:xiaoxi666的专栏xiaoxi666的专栏

[编程题] 模 时间限制:1秒 空间限制:32768K 给定四个正整数a,b,c,k,回答是否存在一个正整数n,使得a*n在k进制表示下的各位的数值之和模b为c。 输入描述: 第一行一个整数T(T <= 5,000)。 接下来T行,每行四个正整数a,b,c,k(1 ≤ a ≤ 10^18; 2 ≤ k ≤ 10^18; 0 ≤ c < b ≤ 10^18)表示一个询问,所有输入都是十进制的。 输出描述: 对于每组数据输出一行,Yes表示存在,No表示不存在。 输入例子: 2 3 9 5 10 7 3 1 10 输出例子: No Yes

这其实是一道数学题,核心代码为

下面先上正确代码,证明过程暂时不会,还望各位路过大佬不吝赐教。

代码语言:javascript
复制
 1 #include <iostream>
 2 using namespace std;
 3 
 4 //返回x和y的最大公约数
 5 long long gcd(long long x, long long y)
 6 {
 7     long long z = y;
 8     while(x%y!=0)
 9     {
10         z = x%y;
11         x = y;
12         y = z;
13     }
14     return z;
15 }
16 
17 int main()
18 {
19     int T;
20     cin>>T;
21     while(T--)
22     {
23         long long a,b,c,k;
24         cin>>a>>b>>c>>k;
25         if(c%gcd(b,gcd(a,k-1))==0)
26             cout<<"Yes"<<endl;
27         else
28             cout<<"No"<<endl;
29     }
30     return 0;
31 }

 这题挺有意思。。。证明过程会及时补充。

 特意备注:扩展欧几里得

 20170627更新,以下是walker大佬的解答

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  20170627更新,以下是walker大佬的解答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档