作为一个大蒟蒻,我就只有时间写c了QAQ
题意:
给n,k,求有多少个3元组(a,b,c),满足a+b,b+c,c+a都是k的倍数(n,k<=2e5,1<=a,b,c<=n)
根据题意可以推导:
∵(a+b)%k=0
(b+c)%k=0
(c+a)%k=0
∴[a+b-(b+c)]%k=0
∴(a-c)%k=0
∴(a+c+a-c)%k=0
∴2a%k=0
同理:2b%k=0,2c%k=0
分类讨论:
当k为奇数时,显然a,b,c都是k的倍数,答案就是pow(int(n/k),3)
当k为偶数时,a,b,c都是k/2的倍数,但a+b的和不为偶数时,就不符合要求了。
所以a,b,c要么全是奇数,要么全是偶数。
答案就是pow(int(n/(k/2),3)+pow(int((n+k/2)/k,3).
1 #include<bits/stdc++.h> 2 ll n,k,p,ans; 3 int main(){ 4 cin>>n>>k; 5 p=n/k; 6 ans=p*p*p; 7 if(k%2==0){ 8 p=(n+(k/2))/k; 9 ans+=p*p*p; 10 } 11 cout<<ans<<‘\n‘; 12 }
代码
原文地址:https://www.cnblogs.com/mimiorz/p/9571862.html
时间: 2024-11-04 23:33:11