当前位置:   article > 正文

蓝桥杯常用算法——数学函数_蓝桥杯常用函数

蓝桥杯常用函数

数学库函数

头文件
1.abs(x):求整数的绝对值。
2.fabs(x): 求浮点数的绝对值。
3.sqrt(x):求x的平方根。
4.pow(x,y):求x的y次方。
5.ceil(x):求不小于x的最小整数。
6.floor(x):求不大于x的最大整数。
7.log(x):求x的自然对数。
8.log10(x):求以十为底x的对数。
9.sin(x):求x的正弦。
10.cos(x):求x的余弦

求素数

方法一:
时间复杂度O(n)

bool IsPrime(int x)
{
 if(x <= 1)
  return false;
 for(int i = 2;i < x; ++i)
  if(x % i == 0 )
   return false;
 return true;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

方法二:
时间复杂度为O(n^1/2)

bool IsPrime(int x)
{
 int k=sqrt(x);
 if(x <= 1)
  return false;
 for(int i = 2;i <= k; ++i)
  if(x % i == 0 )
   return false;
 return true;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

筛法求素数

时间复杂度为O(n)

//求1000000以内的素数
#include<iostream>
using namespace std;
const int MAX_NUM=1000000+10;
bool prime[MAX_NUM];
int main(){
 prime[2]=true;
 for(int i=3;i<MAX_NUM;i+=2){
  prime[i]=true;
 }
 for(int i=3;i<MAX_NUM;++i){
  if(prime[i]){
   for(int j=2*i;j<MAX_NUM;j+=i){
    prime[j]=false;
   }
  }
 }
 for(int i=0;i<MAX_NUM;++i){
  if(prime[i])
   cout<<i<<" ";
 }
 return 0;
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

欧拉筛法求素数

/*使用欧拉筛法求小于等于n的素数的个数*/
#include<iostream> 
using namespace std;
int prime[10000001]={0};//存素数 
bool vis[100000001]={0};//保证不做素数的倍数 
int main()
{
    int n, cnt = 0;
    cin>>n;
   for(int i = 2; i <= n; i++){
        if(!vis[i])//不是目前找到的素数的倍数 
         prime[cnt++] = i;//找到素数
        for(int j = 0; j<cnt && i*prime[j]<=n; j++){
            vis[i*prime[j]] = true;//找到的素数的倍数不访问 
            if(i%prime[j]==0){
             break;
   } 
  }
    }
    cout<<cnt<<endl;
    
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

求最大公因数

  1. 辗转相除法(欧几里得算法)
//求a和b的最大公因数
int gcd(int a,int b){
	return b==0?a:gcd(b,a%b);
}
  • 1
  • 2
  • 3
  • 4

质因数分解

定义:把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫分解质因数。
分解对象:合数

//将一个数n分解为若干个从小到大排序的质因数的积 
#include<iostream>
#include<cmath>
using namespace std;
int main() {
 int n,m;
 cin>>n;
 m=n;
 cout<<n<<"=";
 if(n<2)
  return 0;
 for(int i=2;i*i<=m;++i){//i=i%2==0?i+2:i+1
  while(m%i==0){
   m/=i;
   cout<<i;
   if(m!=1){
    cout<<"*";
   }
  }
 }  
 if(m!=1){
  cout<<m;
 }
 return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

运行结果:
在这里插入图片描述

第二大整数

#include<iostream>
using namespace std;
int main()
{
 int x;
 int max=-1000000,mbx=-1000000;
 while((cin>>x)&&x!=0){
  if(mbx<=x){
   if(max<x){
    mbx=max;
    max=x;
   }else{
    mbx=x;
   }
  }
 }
 cout<<mbx<<endl;
 return 0;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

判断整数

bool isInt(double d){
	int k=pow(10,-6);
	return d-(int)d<k && -(d-(int)d) < k;
}
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/569784
推荐阅读
相关标签
  

闽ICP备14008679号