洛谷——P1348 Couple number

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷——P1348 Couple number相关的知识,希望对你有一定的参考价值。

P1348 Couple number

题目描述

任何一个整数N都能表示成另外两个整数a和b的平方差吗?如果能,那么这个数N就叫做Couple number。你的工作就是判断一个数N是不是Couple number。

输入输出格式

输入格式:

 

仅一行,两个长整型范围内的整数n1和n2,之间用1个空格隔开。

 

输出格式:

 

输出在n1到n2范围内有多少个Couple number。

注意:包括n1和n2两个数,且n1<n2,n2 - n1 <= 10 000 000。

 

输入输出样例

输入样例#1: 复制
1 10
输出样例#1: 复制
7




打表找规律
1    1
2    1
3    2
4    3
5    4
6    4
7    5
8    6
9    7
10    7
11    8
12    9
13    10
14    10
15    11
16    12
17    13
18    13
19    14
20    15
21    16
22    16
23    17
24    18
25    19
26    19
27    20
28    21
29    22
30    22

规律:

1  1  2  3

4  4  5  6

7  7  8  9

所以s=n/4*3+n%4-1  (n%4>1‘)

  s=n/4*3+n%4     (n%4<=1)

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
int f1,f2;
LL read()
{
    LL x=0,f=1;char ch=getchar();
    while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
    while(ch>=0&&ch<=9) x=x*10+ch-0,ch=getchar();
    return x*f;
}
LL work(LL n)
{
    if(n%4<=1) return n/4*3+n%4;
    return n/4*3+n%4-1; 
}
int main()
{
    LL a=read(),b=read(),ans;
    if(a>0) f1=1;else f1=-1;
    if(b>0) f2=1;else f2=-1;
    a=abs(a),b=abs(b);
    if(a>b) swap(a,b); 
    if(f1*f2>0) 
    {
        LL ans1=work(a-1),ans2=work(b);
        ans=abs(ans1-ans2);
    }
    else 
    {
        LL ans1=work(a),ans2=work(b);
        ans=ans1+ans2+1;
    }
    printf("%lld",ans);
    return 0;
}

 

以上是关于洛谷——P1348 Couple number的主要内容,如果未能解决你的问题,请参考以下文章

P1348 Couple number

Couple number

Sicily 1021 Couple

洛谷P1467 循环数 Runaround Numbers

洛谷P1465 序言页码 Preface Numbering

洛谷P2723 丑数 Humble Numbers