模和除

 

模和除

 
题目描述

两个整数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<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;
}

纪念一下!

转载于:https://www.cnblogs.com/yuyixingkong/p/3737782.html

在MATLAB中,二除法(Modulo-2 Division)一种用于二进制数据的除法运算。它通常用于编码和解码中的纠错码技术,如循环冗余校验(CRC)和卷积码。 二除法的基本原理是将被除数和除数都看作二进制数,并进行按位异或(XOR)操作。具体步骤如下: 1. 将被除数和除数转换为二进制形式。 2. 将除数左移,使其最高位与被除数的最高位对齐。 3. 用被除数的最高位与除数的最高位进行异或操作,得到商的最高位。 4. 将得到的商的最高位与除数的每一位进行异或操作,得到新的被除数。 5. 重复步骤3和步骤4,直到被除数的位数小于除数的位数。 6. 最后得到的商即为二除法的结果。 以下是MATLAB中实现二除法的示例代码: ```matlab function [quotient, remainder] = modulo2_division(dividend, divisor) dividend = logical(dividend); % 将被除数转换为逻辑数组 divisor = logical(divisor); % 将除数转换为逻辑数组 dividend_length = length(dividend); divisor_length = length(divisor); quotient = false(1, dividend_length); % 初始化商为全0数组 remainder = dividend; % 初始化余数为被除数 for i = 1 : dividend_length - divisor_length + 1 if remainder(i) == 1 % 如果余数的最高位为1 quotient(i) = true; % 商的对应位为1 remainder(i : i + divisor_length - 1) = xor(remainder(i : i + divisor_length - 1), divisor); % 异或操作 end end end ``` 使用该函数,你可以输入被除数和除数,得到二除法的商和余数。例如: ```matlab dividend = [1 0 1 1 0 1]; % 被除数 divisor = [1 0 1]; % 除数 [quotient, remainder] = modulo2_division(dividend, divisor); disp("商:"); disp(quotient); disp("余数:"); disp(remainder); ``` 希望以上介绍和示例代码能够帮助到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值