数论——Codeforces Beta Round #10 :C - Digital Root
Posted on 2011-07-19 10:10 huhuuu 阅读(293) 评论(0) 编辑 收藏 举报比较好的数论
d(6543) = d(6 + 5 + 4 + 3) = d(18) = 9、
其实d(n)=n%9
all+=a[i]*a[j]*a[(i*j)%9];//是统计(i*j))%9==((k)%9)的次数
__int64 add=0;
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j+=i)
{
add++;
}
}//统计((i*j)%9==((k)%9))&&(i*j)==k的次数
先减一下就是((i*j)%9==((k)%9))&&(i*j)!=k的次数
View Code
#include<stdio.h>
__int64 a[10];
int main()
{
int n;
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++)
{
a[i%9]++;
}
__int64 all=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
all+=a[i]*a[j]*a[(i*j)%9];//爆int
}
}
__int64 add=0;
for(i=1;i<=n;i++)
{
for(j=i;j<=n;j+=i)
{
add++;
}
}
printf("%I64d\n",all-add);
}