酷代码 AI
菜单
服务商

题目描述 称一个数 x 是孤独数,当且仅当 x 是质数且 x 除以 m 的余数是 r。 给出正整数 n,m,r,k,求 1∼n 内第 k 大的孤独数。若不存在输出 −1。 例如,3,5,11,7 这四个数中,从大到小排序时 7 是第 2 名,那么我们说 7 是第二大的。 输入格式 输入一行四个正整数 n,m,r,k,含义见题目描述。 输出格式 输出一行一个整数表示 1∼n 内第 k 大的孤独数,若不存在则输出 −1。 输入样例1 20 3 2 2 输出样例1 11 输入样例2 10000 6 4 1 输出样例2 -1 输入样例3 97 10 7 6 输出样例3 7 说明/提示 【样例 1 解释】 当 m=3,r=2 时,一个数是孤独数当且仅当其是质数,并且除以 3 的余数为 2。 1∼20 的质数有 2,3,5,7,11,13,17,19,其中孤独数有 2,5,11,17。 要求 1∼20 内第 2 大的孤独数,根据上面列举出的结论,答案是 11。 【样例 2 解释】 除以 6 余 4 的数一定是偶数,并且不等于 2,所以一定不是质数。因此,此时不存在孤独数,也

```cpp #include <iostream> #include <vector> #include <algorithm> // 判断一个数是否为质数 bool isPrime(int num) { if (num < 2) return false; for (int i = 2; i * i <= num; i++) { if (num % i == 0) return false; } return true; } int main() { int n, m, r, k; std::cin >> n >> m >> r >> k; std::vector<int> lonelyNumbers; // 找出 1 到 n 内所有孤独数 for (int i = 1; i <= n; i++) { if (isPrime(i) && i % m == r) { lonelyNumbers.push_back(i); } } // 对孤独数从大到小排序 std::sort(lonelyNumbers.begin(), lonelyNumbers.end(), std::greater<int>()); // 判断是否存在第 k 大的孤独数 if (lonelyNumbers.size() < k) { std::cout << -1 << std::endl; } else { std::cout << lonelyNumbers[k - 1] << std::endl; } return 0; } ``` [2025-11-10 20:01:57 | AI问答 | 298点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多