1:最大公约数的求法
欧几里得算法实现。递归实现
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 __int64 gcd(__int64 y,__int64 x) 7 { 8 __int64 ans=0; 9 if(x==0) 10 ans=y; 11 else 12 ans=gcd(x,y%x); 13 return ans; 14 } 15 int main() 16 { 17 int t; 18 __int64 A,B; 19 scanf("%d",&t); 20 scanf("%I64d %I64d",&A,&B); 21 if(A>B) 22 swap(A,B); 23 printf("%I64d\n",gcd(A,B)); 24 } 25 return 0; 26 }
2:最小公倍数和最大公约数的关系
设n和m的最大公约数是p,最小公倍数是q,那么有下列的关系
p*q=n*m,所以求两数的最大公约数可以转换成求求两数的最大公约数再根据两者之间的关系来求最小公倍数= =
3:素数的判定
1> 试商法
int is_prime() { for(int i=2;i*i<=n;i++) { if(n%i==0) return 0; } return 1; }
2>筛选法
数组a[]存的是1000000以内的素数
int get_prme() { int k=0; for(int i=2;i<=1000000;i++) { if(!chick[i]) a[k++]=i; for(int j=0;j<k;j++) { if(i*a[j]>1000000) break; chick[a[j]*i]=1; if(i%a[j]==0) break; } } return 0; } //筛选法求素数
3:分解一个数的质因子,其中a[]存的是素数,f[]存的是某个数的质因子= =
int get_fx(int x) { int j,k=0; for( j=0;a[j]*a[j]<=x;j++) { if(x%a[j]==0) f[ k++]=a[j]; while(x%a[j]==0) { x=x/a[j]; f[k++]=a[j]; } if(x==1) break; } if(x!=1) f[k++]=x; return 0 }
4:能被11整除的数他满足奇位数上和-偶位数和的绝对值能被11整除= =
to be continued~~~
时间: 2024-12-15 22:02:56