【Mail.Ru Cup 2018 Round 3 B. Divide Candies】分析+暴力
阿新 • • 發佈:2018-11-28
B. Divide Candies
題意
給你一個n*n的方格,點(i,j)的權值為
問這個方格內有多少個數是m的倍數
做法
如上圖藍色陰影用藍色塊翻倍算,紅色陰影用紅色塊翻倍算,紫色塊自己算
程式碼
#include<stdio.h>
typedef long long ll;
int main()
{
ll n,m;
scanf("%lld%lld",&n,&m);
ll cnt=0;
for(ll i=1;i<=m;i++)
{
for(ll j=1;j<=m;j++)
{
ll tmp=i*i+j*j;
if(tmp%m==0) cnt++;
}
}
ll ans=((n/m)*(n/m))*cnt;
cnt=0;
for(ll i=(n-n%m)+1;i<=n;i++)
{
for(ll j=1;j<=m;j++)
{
ll tmp=i*i+j*j;
if(tmp%m==0) cnt++;
}
}
ans+=2LL*cnt*(n/m);
cnt=0;
for(ll i=(n-n%m)+1;i<=n;i++)
{
for(ll j=(n-n%m)+1;j<=n;j++)
{
ll tmp=i*i+j*j;
if(tmp%m==0) cnt++;
}
}
ans+=cnt;
printf("%lld\n",ans);
return 0;
}