之前的题目:最大也就到2e5左右。1e9的数据范围就意味着,即使是O(n)的复杂度,也会超时。此时可以考虑使用数学方法进行解题。
❗打表:利用电脑去找一些合法答案,然后在这些合法答案中找规律。
⭐打表后找到的规律:
(1)好像所有的奇数都是合法的X,都可以用平方差表示。
(2)偶数中,只有4的倍数能够用平方差表示。
打表代码:
//打表找规律
void test(){map<int,int>st;for(int i = 1; i <= 100; i ++){for(int j = 0; j <= 100; j ++){for(int k = 0; k <= 100; k ++){if(i == (j * j - k * k)){//if(i % 2)continue;if(!st[i])cout << i << endl;st[i] = true;}}}}
}
#include <iostream>
#include<bits/stdc++.h>
#define int long long
#define INF 0x3f3f3f3f
using namespace std;
void solve(){int l,r;cin>>l>>r;//1-R之间int sr=(r+1)/2+r/4;//奇数个数+4的倍数//1-L之间int sl=(l-1+1)/2+(l-1)/4;//L-R之间cout<<sr-sl<<endl;
}
signed main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int t;t=1;//cin>>t;while(t--)solve();
}