标签:strong gcd 数学 元素 位置 out tor while ...
概要:
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