首页 > 试题广场 >

非整除集合

[编程题]非整除集合
  • 热度指数:2755 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个由正整数组成的集合S,找出一个最大的子集合S,使得S中任意两个数字的和都不能被K整除。

例如S=「10,10,12,19,22,24,25」,K=4。此时S最多只能取3个数,可能的取值为「10,12,25」或者「19,22,24」等。

输入描述:
输入为两行,第一行两个数字,分别表示集合S的元素数量N和K。第二行为N个数字,分别是S的各个元素值。


数据范围:
1 < N < 10^5
1 < K < 100
1 < S[i] < 10^9


输出描述:
输出为一个数字,集合S的最大长度。
示例1

输入

4 3
1 7 2 4

输出

3
头像 bandiaoz
发表于 2024-12-27 02:18:54
解题思路 题目要求找出一个最大的子集,使得其中任意两个数的和都不能被 整除。关键发现: 如果两个数的和能被 整除,那么它们对 的余数之和也能被 整除 对于余数为 的数,最多只能选一个 对于余数为 的数(当 为偶数时),最多只能选一个 对于其他余数 ,要在 和 中选择数量较多的那组 展开全文
头像 VickW
发表于 2020-02-12 17:00:53
#include <iostream> #include <cstdio> using namespace std; int main(){ int n; //元素数量 int k; //任意俩个数不能被k整除 cin>>n>>k; 展开全文