给你两个数N和K
对于一个三元组(a,b,c)满足a+b,b+c和c+ a都可以被K整除。N, K, a,b,c都是正整数, a,b,c 都不大于N,求满足条件的三元组个数。
import java.util.Scanner;
/*由(a+b)%k=0,(b+c)%k=0,(a+c)%k=0我们可以知道,a,b,c要么都为k的整数倍,要么当他们模上k时余数为k/2。
我们现在来考虑f(n,3),即从不大于n的数里面选出可重复的3个数满足条件的个数。
首先我们可以知道k的整数倍有cnt1 = n/k 个数,然后第二种情况有cnt2 = n/k+(n%k>=k/2)个数(前提是k为偶数)。
因为我们是从中选数,所以是n%k>=k/2。
对于第一种情况,不论k的奇偶都会贡献给答案。而第二种情况只有当k为偶数时才被贡献给答案。
统计结果时就分别考率选三个不同的丶选两个相同的以及三个都相同的情况,最后加起来就是了。
*/
public class 三角关系 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=sc.nextInt();
long cnt1=n/k;
long cnt2=n/k+(n%k>=k/2?1:0);
long ans=cnt1*(cnt1-1)*(cnt1-2)+3*(cnt1-1)*cnt1+cnt1;
if(k%2==0)
ans+=cnt2*(cnt2-1)*(cnt2-2)+3*(cnt2-1)*cnt2+cnt2;
System.out.println(ans);
sc.close();
}
}
public class Test {
public void ok(int m,int n) {
List<Integer> list=new ArrayList<>();
for(int i=1;i<n;i++) {
for(int j=1;j<n;j++) {
for(int k=1;k<n;k++) {
if (((i+j)%m==0)&&((j+k)%m==0)&&((k+i)%m==0)) {
list.add(i);
list.add(j);
list.add(k);
}
}
}
}
for (int i=0;i<list.size()-2;i=i+3) {
System.out.println(list.get(i)+" "+list.get(i+1)+" "+list.get(i+2)+'\n');
}
}
public static void main(String[] args) {
new Test().ok(6, 100);
}
}