原題:
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; }