首页 > 其他 > 详细

数论基础

时间:2015-05-25 22:26:27      阅读:154      评论:0      收藏:0      [点我收藏+]

数论基础

1、欧几里德算法

int gcd(int a, int b)
{
    return b == 0 ? a : gcd(b , a%b);
}

int lcm(int a, int b)
{
    return a/gcd(a,b)*b;//防止溢出

}

2、Eratosthenes筛法

int m = sqrt(int n+0.5);
memset(vis, 0, sizeof(vis));
for(int i = 2; i <= m; i++)
{
    if(!vis[i])
    for(int j = i*i; j <= n; j += i)
    {
        vis[j] = 1;
    }
}

3、扩展欧几里德算法

4、同余与模算术

1)同余定理

//(a+b)%n=(a%n+b%n)%n

//(a-b)%n=(a%n-b%n+n)%n

//a*b%=(a%n)*(b%n)%n;

int mul_mod(int a, int b, int n)
{
    a %= n;
    b %= n;
    return (int)((long long)a * b % n);
}

2)大数取模

scanf("%s%d",n, &m);
int len = strlen(n);
int ans = 0;
for(int i = 0; i < len; i++)
{
    ans=(int)((long long)ans*10 + n[i] - ‘0‘) % m);
}
printf("%d\n",ans);

数论基础

原文:http://blog.csdn.net/xinag578/article/details/45974511

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!