原题:
http://acm.hdu.edu.cn/showproblem.php pid=1573
这个题目真是坑爹啊- =首先说M个正整数,结果测试数据里面就有0 - =莫非0成了正整数?
扩展中国剩余定理解这道题目很多模板也不对- =造呢。。也不知道到底可不可以从0开始- =坑爹的题目。。
如果时间急别在这里干着急了- =坑死人
#include#include #include using namespace std; #define lln long long int lln a[11]; lln b[11]; lln gcd( lln a, lln b) { return b == 0 a : gcd(b, a % b); } void ace() { int n, m; int t; int i, j; int lcm; bool flag; int num; cin >> t; while (t--) { memset(a, 0, sizeof(a)); memset(b, 0, sizeof(b)); cin >> n >> m; lcm = 1; flag = false; num = 0; for (i = 0; i < m; i++) { cin >> a[i]; lcm = lcm * a[i] / gcd(lcm, a[i]); } for (i = 0; i < m; i++) cin >> b[i]; for (i = 1; i <= lcm && i <= n; i++) //find the minium num 坑爹的地方- - i不能从0开始 { for (j = 0; j < m; j++) if (i % a[j] != b[j]) break; if (j == m) { flag = true; break; } } if (flag) { int temp = n % lcm; if (temp >= i) i = n / lcm + 1; else i = n / lcm; printf("%d\n", i); // while (i <= n) // { // i += lcm; // num++; // } // cout << num << endl; } else printf("0\n"); } } int main() { ace(); return 0; }