FJUT 3101

                                    Home_W的简单问题3
                                      TimeLimit:1000MS  MemoryLimit:128MB
                                       64-bit integer IO format:%lld

给你两个整数a,b。问a,b之间的所有的整数(包括a,b)的因子和是奇数还是偶数

比如a=1,b=3, 1的因数有 1。2的因数有1,2。3的因数有1,3.。

1+1+2+1+3=8. 所以1,3之间的所有整数的因子和是偶数。1510154017949071413.jpg

查看废话:注意这题有一个很简单的逻辑坑

现在把这坑悄悄的告诉你,a不一定小于b

Input
第一行是一个T,代表数据的组数

接下来有T组数据。

每组数据第一行是两个整数a,b

T<=50000

1<=a,b<=500000

其实这题本来想把数据范围出到1e18的,但那样新生就死翘翘了

Output
输出0代表是偶数,输出1代表是奇数,每个输出结果占一行

SampleInput
2
1 3
1 500000
SampleOutput
0
1

看到这题呢,暴力显然过不去,第一个想法是预处理优化,结果博主太二了,只顾着做了,把预处理优化忘了,先T了一发,cin cout改成scanf printf 后还是T 然后才意识到没预处理。。
这题需要稍微分析下,
首先分奇偶,
(1)如果是奇数,奇数的因子都是奇数,那么有几个奇数呢,我们想到了完全平方数,如果是完全平发数,那么一定有奇数个奇数因子,因子和一定是奇数,比如25 因子有1 5 25,和是31,如果不是完全平方数,比如21 1 21 3 7,因为总有一个数跟他配对,这个数的因子和就是偶数。
(2)如果是偶数, 就看/2的因子和是不是奇数,如果是,那么因子和就是奇数,比如50,/2等于25,50的因子有1 50 2 25 5 10,其中1 25 5是25的因子,因子和是奇数,而剩下50 2 10的和是偶数,如果/2不是完全平方数,那么因子和就是偶数了。

这里再说下偶数的话为什么/2的因子和是奇数的话,这个数因子和一定是奇数,这个数的因子一定有/2后这个数的所有因子,奇+偶=奇,因此……

下面是代码,切记预处理,,,

#include<bits/stdc++.h>
using namespace std;
int s[500005]= {0},qq[500005]={0};
int main()
{
    int t,i,q,k,m;
    for(i=1; i<=500000; i++)
    {
        q=i;
        if(q&1)
        {
            q=sqrt(q);
            if(q*q==i)   s[i]=1;
            else     s[i]=0;
        }
        else
        {
            k=q/2;
            if(s[k]==1)   s[i]=1;
            else     s[i]=0;
        }
        qq[i]=s[i]+qq[i-1];///表示前i个数中因子和是奇数的个数
    }
    
    scanf("%d",&t);
    
    while(t--)
    {
        int a,b,c,d,sum=0;
        scanf("%d%d",&a,&b);
        c=max(a,b),d=min(a,b);
         sum=qq[c]-qq[d-1];///类似前缀和
        if(sum&1)
            puts("1");
        else
            puts("0");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不会c语言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值