码迷,mamicode.com
首页 > 其他好文 > 详细

模和除

时间:2014-05-20 10:17:49      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   c   code   java   

 

模和除

 

题目描述

两个整数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); 这可不是个不是个小数目啊!

我也是经过了无数次的尝试,慢慢摸索出来的,(嘻嘻,还是大学最后一次英语课想出来的,不过回来写代码还是有有一些漏洞没考虑到,bubuko.com,布布扣 ,所以又牺牲了几次bubuko.com,布布扣 ,但是现在满血复活了!o(∩_∩)o 哈哈) bubuko.com,布布扣

 bubuko.com,布布扣 hncu793116483是我。。。当然不止这么多错次,,大概有20次吧bubuko.com,布布扣 ,粗心了。。。。

o(︶︿︶)o 唉,当时比赛的时候怎么就想不到呢,,,
原来规律就在a和b里面呢, 
bubuko.com,布布扣附上代码:
bubuko.com,布布扣
#include<stdio.h>
#include<math.h>
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<sqrt(a);i++)
            {
                temp=a/i-1-i;
                if(temp>0)
                    sum+=temp;
            }
        }
        else
        {
            sum+=b-1;
            j=(__int64)sqrt(a)<b?(__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\n",sum);
    }
    return 0;
}
bubuko.com,布布扣

纪念一下!bubuko.com,布布扣

模和除,布布扣,bubuko.com

模和除

标签:style   blog   class   c   code   java   

原文地址:http://www.cnblogs.com/yuyixingkong/p/3737782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!