(模板1)常用数学结论

最大公约数模板
//最大公约数,欧几里得算法又叫辗转相除法
int gcd(long a,long b)
{
	return b==0?a:gcd(b,a%b);
}
最小公倍数模板
int lcm(int a,int b)
{ 
	int ans;
	b==0?a:gcd(b,a%b);
	return ans=a/gcd(a,b)*b;
}
快速幂(递归)模板
typedef long long LL;
LL pow(LL a,LL b)
{if(b==0) return 1;
if(b&1) return a*pow(a,b-1);
else{LL mul=pow(a,b/2);
return mul*mul;}
快速幂(迭代)模板
typedef long long LL;
LL pow(LL a,LL b)
{
	LL ans=1;
	while(b>0)
	{  
  		if(b&1)
  			ans=ans*a;  
  		a=a*a;
  		b>>=1;
  	}//二进制右移1位,表示b=b/2
	return ans;
}
斐波那契(递归)-最慢
int fib(int n)
{ 
	if (n<1) return 0;
  	if(n==1||n==2) return 1; 
  	return fib(n-1)+fib(n-2);
}
判断是否为闰平年

普通年能被4整除且不能被100整除为闰年
世纪年能被400整除为闰年

bool is_LeapYear()
{
	if(a%400==0||a%4==0&&a%100!=0)
	{
  		cout<<闰年366<<endl;
  		return true;
  	}
  	else
  	{
  		cout<<平年365<<endl;
  		return false;
  	}
}
判断素数(又叫质数)
bool isPrime(int n)
{
	if(n<=1) return false;
	int sqr=(int)sqrt(1.0*n);
	for(int i=2;i<=sqr;i++)
	{
		if(n%i==0) return false;
	}
	return true;
}
判断素数(线性筛)
int p[N],cnt;
bool vis[N];
void get_prime(int x)
{
	vis[1]=true;
	for(int i=2;i<=x;i++{
    	if(!vis[i]) p[cnt++]=i;
      	for(int j=0;p[j]<=x/i;j++)
      	{
      		vis[p[j]*i]=1;
      		if(i%p[j]==0) break;
      	}
     }
}
遍历个位,十位,百位。。
int f(int x)
{
   int t=x%10;
   x/=10;
}
组合数的计算(递归)
long long res[67][67]={0};
long long C(long long n,long long m)
{
	if(m==0||m==n) return 1;
	if(res[n][m]!=0) return res[n][m];
	return res[n][m]=C(n-1,m)+C(n-1,m-1);
}//n=67,m=33时溢出
组合数的计算(定义式变形)
long long C(long long n,long long m)
{
	long long ans=1;
  	for(long long i=1;i<=m;i++)
  	{
  		ans=ans*(n-m+i)/i;}
		return ans;
	}//n=62,m=31时溢出
}
(进制转换)将P进制x转换为十进制的数y
int y=0,n=1;//n在循环中会不断乘P,得到1、P、P的平方、P的三次。。。
while(x!=0)
{
	y+=(x%10)*n;
	x/=10;
	n*=P;
}
(进制转换)将十进制数y转换为Q进制数z
int z[40],num=0;//数组z存放Q进制y的每一位,num为位数
do{
	z[num++]=y%Q;
	y=y/Q;
}
while(y!=0);
//最后将z数组从高位【num-1】到【0】就是Q进制数z
回文串(整数)
bool isPalindrome(int x)
{
    int temp=x,sum;
    if(x<0) return false;
    while(x)
    {
        sum=sum*10+x%10;
        x/=10;
    }
    if(temp==sum) return true;
    else return false;
}
回文串(字符串)
int flag=0; char a[100];
gets(a);
int len=strlen(a);
for(int i=0;i<len/2;i++)
{
	if(a[i]!=a[len-1-i])
	{
		flag=true;
  		break;
  	}
}
if(!flag) printf("是回文串!");
else printf("不是回文串";
蔡基姆拉尔森计算公式
//y为年份,m为月份,d为日期
w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1
//每年的1,2月要当成上一年的13,14月去算
//例如,1901年1月1日应该当成1900年13月1日
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值