noip中的那些鲜为人知的“常识“

在看题解时,我们经常会看到这样一句话:大家应该都知道……,众所周知……,但对于我这种蒟蒻,大佬眼们中的常识,到我这里仿佛比高级算法还难,大多都是听都没听过。
所以,本蒟蒻决定总结一下那些鲜为人知的"常识",让自己不断变强。


持续更新

1.两个数的积=它们的最大公约数和最小公倍数的积。

2.一个序列最少可以用多少个下降子序列拼出来=这个序列最长上升子序列的长度

3.八数码问题中如果逆序对的数量是奇数,那么一定无解。所有的奇数码问题中,如果逆序对的数量时奇数,那么一定无解。

4.偶数码问题中,如果空格到当前目标行(大部分情况下时最后一行)的距离+逆序对数量为奇数,那么一定无解。

5.总结3.4.两点,在N数码问题中: 当N为奇数时,逆序对数量奇偶性相同的两个状态可以互相到达;当N为偶数时,逆序对数量+空格到目标行距离相等的两个状态可以互相到达。

6.斐波那契数列前N项的平方和=f[n]*f[n+1]我不会证明,贴一下大佬的博客

7.lg[i]=lg[i-1]+(1<<lg[i-1]==i);
8.偶数位的回文数除了11都不是质数(显然,因为可以被11整除)
9.波兰特-切比雪夫定理:若整数n > 3,则至少存在一个质数p,符合n < p < 2n − 2。另一个稍弱说法是:对于所有大于1的整数n,至少存在一个质数p,符合n < p < 2n。一道例题:lgP5525小道消息

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
#include<cstring>


using namespace std;
typedef long long ll;
ll n;
ll k;

bool is_prime(long long x){
	if (x==1)
		return false;
	if (x==2)	return true;
	for (long long  i=2;i*i<=x;i++){
		if (x%i==0)	return false;
	}
	return true;
}

int main(){
	scanf("%lld%lld",&n,&k);
	if (is_prime(k+1)&&k*2>=n)	putchar('1');
	//这里一定要写成k*2>=n的形式,而不能写成k>=n/2的形式(如果n是奇数会有下取整问题) 
	else putchar('2');
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值