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 12 13 24 35 46 47 58 69 710 711 812 913 1014 1015 1116 1217 1318 1319 1420 1521 1622 1623 1724 1825 1926 1927 2028 2129 2230 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#include #include #include #define LL long longusing 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;}