题目:http://codeforces.com/problemset/problem/10/C
题意:就是在【1,N】的范围内,找出有多少对A B C,使得A*B !=C&&d(A*B)==d(C).
解:其实d(x)=x%9,用(a*b)%9==c%9的总数ans,减去a*b==c的部分s就是答案。
要注意的是a,b,c的范围是1--N,至于a*b>N的,由于才c<=N的,所以c!=a*b,是满足题意的。
源代码:
#include <stdio.h>
__int64 n;
__int64 a[20];
__int64 ans,s;
int main()
{
scanf("%I64d",&n);
ans=0;
for(int i=0;i<9;i++)
a[i]=0;
for(int i=1;i<=n;i++)
a[i%9]++;
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
ans+=a[i]*a[j]*a[i*j%9];
s=0;
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j+=i)
s++;
printf("%I64d\n",ans-s);
}