代码模板

判断是否是质数:
如果是返回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;
}

  

posted @ 2022-04-24 13:30  皮卡Q  阅读(56)  评论(0)    收藏  举报