给定一个 个元素组成的数组,和一个正整数
。求取两个数之和能被
整除的方案数(即两数之和为k的倍数的方案数)
给定一个 个元素组成的数组,和一个正整数
。求取两个数之和能被
整除的方案数(即两数之和为k的倍数的方案数)
第一行输入两个正整数和
。
第二行输入个数
,用空格隔开。表示整个数组。
一个正整数,代表方案的数量。
7 4 1 2 3 3 4 2 4
4
取下标<1,3>,1+3=4是4的倍数。取下标<1,4>,1+3=4是4的倍数。取下标<2,6>,2+2=4是4的倍数。取下标<5,7>,4+4=8是4的倍数。
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String s1=sc.nextLine();
String[] ss1=s1.split("\\s");
int n=Integer.parseInt(ss1[0]);
int k=Integer.parseInt(ss1[1]);
String s2=sc.nextLine();
String[] ss2=s2.split("\\s");
long [] tong=new long[k]; // 桶里面元素可能大于Int的最大值
long re=0; // 返回值可能大于Int的最大值
for(int i=0;i<n;i++){
tong[Integer.parseInt(ss2[i])%k]++;
}
for(int i=1;i<k/2;i++){
re+=tong[i]*tong[k-i];
}
//处理余数为0;Cn2
re+=tong[0]*(tong[0]-1)/2;
// 偶数时,需要考虑2+2=4
if(k%2==0){
re+=tong[k/2]*(tong[k/2]-1)/2;
}
System.out.println(re);
}
} 考察桶排序的基础