模和除
题目描述
两个整数x和y,满足1<=x<=a,1<=y<=b 且x%y等于x/y的x和y的对数有多少?
x%y是x除以y的余数, x/y是x除以y的商,即整数除。
输入
不超过1000组样例,每个样例占一行,包含两个整数a,b (1 <= a,b <= 10^10);
输出
每个样例输出一行,一个整数,表示答案。
样例输入
1 1
5 5
100 100
样例输出
0
3
227
看上去是不是很简单x%y==x/y。。。
如果你这么想那就大错特错了。看a,b (1 <= a,b <= 10^10); 这可不是个不是个小数目啊!
我也是经过了无数次的尝试,慢慢摸索出来的,(嘻嘻,还是大学最后一次英语课想出来的,不过回来写代码还是有有一些漏洞没考虑到, ,所以又牺牲了几次 ,但是现在满血复活了!o(∩_∩)o 哈哈)
hncu793116483是我。。。当然不止这么多错次,,大概有20次吧 ,粗心了。。。。
o(︶︿︶)o 唉,当时比赛的时候怎么就想不到呢,,,
原来规律就在a和b里面呢,
附上代码:
#include
#include
int main()
{
__int64 a,b,sum,c;
__int64 i,j,temp;
while(scanf("%I64d%I64d",&a,&b)!=EOF)
{
sum=0;
if(a<1||b<1)
continue;
if(b+1>=a)
{
for(i=1;i)
{
temp=a/i-1-i;
if(temp>0)
sum+=temp;
}
}
else
{
sum+=b-1;
j=(__int64)sqrt(a)(__int64)sqrt(a):b;
for(i=2;i<=j;i++)
{
c=a/i;
if(c>b)
{
sum+=b-i;
}
else
{
temp=c-i-1;
if(temp>0)
sum+=temp;
}
}
}
printf("%I64d
",sum);
}
return 0;
}
纪念一下!