数论 大数 大数取模 取模
链接:https://ac.nowcoder.com/acm/contest/831/A
来源:牛客网
某年某月某天的数学课上,Actci正在遨游宇宙呢,对于他的屡教不改,她的数学老师决定难为一下Actci,将他叫醒。
“咳咳,我现在给出一个数 ,判断是否是中某些数的的倍数,你只有一秒钟的时间,答不上来的话,呵,%#W%@#@…”。
作为他后桌的你怎么能看着Actci“受害”呢,于是你决定帮帮他。
123456789
Yes
3
思路
大数取模的模板题, 朴素方法: 根据$$ (a+b) \mod m = ((a\mod m) + (b\mod m)) \mod m
可得:1234%m ---> (1200%m + 34%m)%m ---> `((12*100)%m + (3*10%m+4%m)%m)%m` 也就是说可以拆分为十进制表示 abcd->`a*1000 + b*100 + c*10 + d` 对他们每个数取模求和的结果再取一次模就是该大数的模 ## 代码 ``` c++ #include <iostream> #include <cstring> #include <algorithm> #include <string> using namespace std; bool getmod(string &s, int mod) { int res = 0; for(int i = 0; i < s.size(); i++) { res = (res * 10 + s[i] - '0') % mod; } if(res) return false; return true; } int main() { string s; cin >> s; int res = 0; bool f3 = getmod(s,3),f5 = getmod(s,5),f8 = getmod(s,8),f11 = getmod(s,11); if(f3 || f5 || f8 || f11) cout << "Yes\n"; else cout << "No\n"; if(f3) cout << 3 << " "; if(f5) cout << 5 << " "; if(f8) cout << 8 << " "; if(f11) cout << 11 << endl; return 0; } ```