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

ACM数论中的常见的模板和结论

时间:2015-08-11 23:15:25      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

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~~~

ACM数论中的常见的模板和结论

标签:

原文地址:http://www.cnblogs.com/NaCl/p/4722429.html

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