P4905 报纸
Coros_Trusds · · 题解
题目大意
给定一个
题目分析
前置知识:
欧几里得算法求两数最大公因数:
inline int gcd(int a,int b){
if(!b)return a;
return gcd(b,a%b);
}
我们暴力预处理出
如果当前写有答案(即不互质)并且当前还没有访问过,那么访问之,令当前坐标为
发现
代码
const int ma=235;
bool mp[ma][ma],vis[ma][ma];
int n;
inline int gcd(int a,int b)
{
if(b==0)
{
return a;
}
return gcd(b,a%b);
}
int main(void)
{
n=read();
for(register int i=1;i<=n;i++)
{
for(register int j=1;j<=n;j++)
{
if(gcd(i,j)!=1)
{
mp[i][j]=true;
}
}
}
int ans(0);
for(register int i=1;i<=n;i++)
{
for(register int j=1;j<=n;j++)
{
if(mp[i][j]==true && vis[i][j]==false)
{
ans++;
if(mp[i+1][j]==true && vis[i+1][j]==false)
{
vis[i+1][j]=true;
}
if(mp[i][j+1]==true && vis[i][j+1]==false)
{
vis[i][j+1]=true;
}
}
}
}
printf("%d\n",ans);
return 0;
}