Problem B: 谎言
Description
Yefeng自从学了ACM之后就和人说他能快速的定一个正整数数是否为素数,后来大家猜他大概只知道判定10^18以内的数。于是都想的拿非常大的数来问他。当然对于非常大的数Yefeng自己也是没办法在短时间内计算出来的。还好Yefeng学过素数定理,知道越是大的数,这个数是素数的概率就越低,于是他就故意告诉大家一个数,并附上一句话,这个数是你给的数一个因子,所以你给的数是一个合数。聪明的你能想个方法判定戳穿Yefeng的谎言吗?
Input
若干组测试数据,每组测试数据两行,第一行是Yefeng要判定的数a(10^20<=a<=10^1000),第二行是Yefeng猜测的因子b(2<=b<=9999)。数据保证整数没有前导0。
Output
如果b是a的因子,那么输出YES,否则输出余数。
Sample Input
546112345612312369851232
2145645612123123154654319 2
2145645612123123154654319 2
Sample Output
YES
1
1
// File Name: Problem B: 谎言 // Author: rudolf // Created Time: 2013年04月12日 星期日 20时24分00秒 #include<vector> #include<list> #include<map> #include<set> #include<deque> #include<stack> #include<bitset> #include<algorithm> #include<functional> #include<numeric> #include<utility> #include<sstream> #include<iostream> #include<iomanip> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<ctime> #include<string.h> using namespace std; const int Max=1010; string num; int main() { int k; while (cin>> num >> k) { //int len = strlen(num); int t; t = 0; for (int i = 0; i < num.size(); i ++) { if (t >= k) { t %= k; i --; } else t = 10*t + num[i] - '0'; } if (t%k) { cout<<t%k<<endl; } else cout<<"YES"<<endl; } return 0; }