【洛谷 1348】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


解析:本题若是暴力枚举,时间一定会爆,so我们想到了数论√
(1)a^2-b^2=(a+b)(a-b)=>a+b与a-b奇偶性相同
(2)所以(a+b)(a-b)要么是奇数,要么是4的倍数
(3)couple number要么是奇数,要么是4的倍数
如何证明:
AB均奇,A+B为偶,A-B也为偶,奇偶性相同
AB均偶,A+B偶,A-B也为偶,奇偶性相同
A奇B偶,A+B奇,A-B也为奇,奇偶性相同
A偶B奇,A+B为奇,A-B也为奇,奇偶性相同
【好累啊嘤嘤嘤~~~~~,代码很短,思路很巧】

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
typedef long long ll;
using namespace std;
int n1,n2,ans=0;
int main(){
    cin>>n1>>n2;
    for(int i=n1;i<=n2;i++)
        if(i%4==0||i%2!=0)ans++; 
    cout<<ans<<endl;
    return 0;
}
原文地址:https://www.cnblogs.com/wuhu-JJJ/p/11149985.html