码迷,mamicode.com
首页 > 其他好文 > 详细

数学基础

时间:2019-02-26 13:19:44      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:strong   gcd   数学   元素   位置   out   tor   while   ...   

概要:

  1. 素数表
  2. 进制转换
  3. 最大公约数、质因子分解
  4. 二分法

 

1、素数表

判断是否是素数

1 bool isPrime(int n){
2      if(n<=1)  return false;
3      int sqr=(int)sqrt(1.0*n);
4      for(int i=2;i<=sqr;i++){
5          if(n%i==0) return false;
6      }
7          return true;
8 }

 

 

 

素数表(埃氏筛法)

 1 //素数表,埃氏筛法,每次把每个素数的倍数去掉
 2 const int maxn=101;//表长
 3 int prime[maxn],pNum=0;
 4 bool p[maxn]={0};
 5 void Find_Prime(){
 6     for(int i=2;i<maxn;i++){
 7         if(p[i]==false){   //如果i是素数
 8             prime[pNum++]=i;
 9             for(int j=i+i;j<maxn;j+=i){
10                 p[j]=true;
11             }
12         }
13     }
14 
15 }

 

 


 

2、进制转换

求sum的n进制数

1      int ans[31],num=0;
2      do{
3          ans[num++]=sum%n;
4          sum/=n;
5      }while(sum);
6      for(int i=num-1;i>=0;i--){
7          cout<<ans[i];
8      }

 

 

3、最大公约数

最大公约数(欧几里得算法)

1 //最大公约数
2   int gcd(int a,int b){
3      if(b==0) return a;
4      else return gcd(b,a%b);
5  }
6  //最小公倍数   a/(gcd(a,b))*b

 

 

质因子分解 PAT 甲级1059

1  struct Factor{
2      int x,cnt; //x是质因子,cnt是质因子个数
3  }fac[10]; //取十位就够了,int不会超过10位

 


 

 

4、二分法

解决“寻找有序序列第一个满足某条件的元素的位置”问题的固定模板

二分区间为左闭右闭的[left,right],初值必须能覆盖解的所有可能取值

 1 int solve(int left,int right){
 2     int mid;
 3     while (left < right) {
 4         mid= (left + right) /2
 5         if(....){ //条件成立
 6             right=mid;
 7         }
 8         else{
 9             left=mid+1;
10         }
11     }
12     return left; //返回夹出来的位置
13 }

 

数学基础

标签:strong   gcd   数学   元素   位置   out   tor   while   ...   

原文地址:https://www.cnblogs.com/Mered1th/p/10436536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!