当前位置: 首页 > 知识库问答 >
问题:

求两个整数之间偶数奇偶数的个数

冯育
2023-03-14

我想求两个整数之间的偶数奇偶数的个数。以下是我目前所写的内容:

#include <bits/stdc++++.h>
using namespace std;
#define fastio                        \
    ios_base::sync_with_stdio(false); \
    cin.tie(NULL)
#define ll long long int

bool findParity(ll x)
{
    ll y = x ^ (x >> 1);
    y = y ^ (y >> 2);
    y = y ^ (y >> 4);
    y = y ^ (y >> 8);
    y = y ^ (y >> 16);

    if (y & 1)
        return 1;
    return 0;
}

void solve()
{
    ll a,b; cin >> a >> b;
    ll evenparity = 0;
    for(ll i = a; i <= b; ++i){
        if(findParity(i)==0) evenparity++;
    }
    cout << evenparity;
}

signed main()
{
    fastio;
    solve();
    return 0;
}

这个很管用。但是,AB这两个整数之间的差值可能高达10^11,这意味着类似这样的O(n)解决方案是行不通的。是否有一个更有效的,即O(1)解决方案来解决这个问题?

共有2个答案

谢麒
2023-03-14

你所需要的是一个函数,它从[0-x]区间计算偶数奇偶校验数,我们称之为sumParity,然后简单地返回sumParity(b)-sumParity(a-1)。(如果我理解得正确的话,你要找的是[a,b]闭区间。)

如果从零开始对奇偶校验进行计数,并将数字(0-1)、(2,3)、(4,5)配对,则每对中正好有1个偶数和1个奇数奇偶校验。(这些对仅在最低位不同)。

因此,如果x是奇数,则sumParity(x)=(x+1)/2,否则x/2+parity(x)。

(您已经具有奇偶校验(x)函数)

f(a,b)=总和奇偶校验(b)-总和奇偶校验(a-1)

它只适用于正整数,但您也可以很容易地将逻辑扩展到负数。

马业
2023-03-14

每对偶数/奇数整数正好包含一个偶数奇偶数。

因此,只要检查a和b是否为偶数奇偶数,看看它们是否对自己的偶数/奇数对有贡献,并计算中间对就足够了。这是O(1)。

 类似资料:
  • 我正在我的大学课程中研究一个简单的JAVA问题。我被这个节目难住了。我将展示我到目前为止所拥有的,并给出我必须回答的问题。我也在StackOverflow上看了一个类似的问题,但它不是同一个问题,所以没有帮助。我需要编写的程序是: 编写一个使用“while”循环执行以下步骤的程序: a、 )提示用户输入两个整数:“firstNum”和“secondNum”(firstNum必须小于secondNu

  • 编辑:哈哈,我从没想过你们会这么野蛮。我想这是一个大学生来寻找答案的好地方。如果我不在乎,为什么我会在这里。。基本上,我的问题与其他问题不同,因为我确实需要第一个循环来陈述我的偶数,即:1012146181820。我真诚地希望我能得到一些关于如何在第二个循环中恢复firstNum的原始值的反馈,而不是期望在几秒钟内被选为分数答案的批评。 我已经实现了一个代码,我在论坛上的一个非常相似的问题中看到了

  • 本文向大家介绍奇数和偶数之和之间的差。,包括了奇数和偶数之和之间的差。的使用技巧和注意事项,需要的朋友参考一下 问题陈述 对于给定的长整数n,编写一个程序以查找奇数位和偶数位总和之间的差是否为0。索引从0开始。 示例 示例 以下是Java中的程序,用于查找所需的输出。 输出结果

  • 我被要求编写一个程序,用Switch-Case语句的自由落体方法,获取1-10之间的5个数字,并找出其中有多少是偶数,有多少是奇数。我已经编写了代码,并且在本地范围内声明了变量,其中存在相同的开关情况,所以我认为这不是块范围的问题。如果数字是奇数(1,3,5,7,9),则奇数计数器变量(oc)递增。偶数也会发生同样的情况。如果数字不在范围内,则打印“无效输入”(它继续,不会中断程序)。 问题是,它

  • Python3 实例 以下实例用于判断一个数字是否为奇数或偶数: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com # Python 判断奇数偶数 # 如果是偶数除于 2 余数为 0 # 如果余数为 1 则为奇数 num = int(input("输入一个数字: ")) if (num % 2) == 0: print

  • 我需要写一个程序来计算用户输入的整数的奇偶平均数。用户键入“完成”以完成。输出将显示奇数的平均值和偶数的平均值。 我有一个while循环程序,可以计算数字的和,我正试图增加奇数和偶数和的额外要求。这是代码: 下面是我修改的代码,对奇数和偶数进行排序,然后对每组进行平均。 预期: 实际: