蓝桥杯刷题-17-平方差-打表+数学⭐(⊙o⊙)

在这里插入图片描述

之前的题目:最大也就到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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值