代码模板
判断是否是质数:
如果是返回1;
否则返回0;
int func(int n) { int i; for(i=2; i<=sqrt(n); i++){ if(n%i==0){ return 1; } } return 0; }
二分的两个模板:
调用函数的话头文件#include<algorithm>
int find(int x,int a[],int n){ int l=0,r=n-1; while(l<r){ int mid=l+r+1>>1; if(a[mid]<=x)l=mid; else r=mid-1; } return l; }
//找到的是(大于等于查找数最小的那个数)问题如 1 2 3 3 *3 4 4 5 6;找3,返回的是*3的下标
或者用函数 lower_bound( number, number + n, x) - number(number是数组,这个函数前开后闭,需要越界写,x是要查的数);
返回小于等于x的第一个元素的下标
int find(int x,int a[],int n){ int l=0,r=n-1; while(l<r){ int mid=l+r>>1; if(a[mid]>=x)r=mid; else l=mid+1; } return l; }
//找到的是(小于等于查找数最大的那个数的下标)问题如 1 2 *3 3 3 4 4 5 6;找3,返回的是*3的下标
或者用函数 lower_bound( number, number + n, x) - number(number是数组,这个函数前开后闭,需要越界写,x是要查的数);
返回大于等于x的第一个元素的下标
除重的操作:
需要两个数组配合:
a[]是要除重的数组;
b[]是除重后存放数据的数组。
for(int i=0;i<n;i++){ if(i==0 || a[i]!=a[i-1]){//收集第一个数据为了不落下第一个数。(万一第一二个数相等)。 b[k++]=a[i]; } }
正常的快速幂
ll ksm(ll a,ll b,ll n) { ll ans = 1; ll t = a%n; while(b) { if(b&1) ans = (ans * t)%n ; t = (t*t)%n; b >>=1; } return ans; }
相当于加强版的快速幂 大数的mod x的y次方mod上一个数 y极其大。
ll ksm(ll a,ll b,ll n)
{
ll ans = 1;
ll t = a%n;
while(b)
{
if(b&1)
ans = (ans * t)%n ;
t = (t*t)%n;
b >>=1;
}
return ans;
}

浙公网安备 33010602011771号