雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数论——Codeforces Beta Round #10 :C - Digital Root

Posted on 2011-07-19 10:10  huhuuu  阅读(290)  评论(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);
}