`

【欧拉函数+容斥原理】HDU 1695 GCD

阅读更多
http://acm.hdu.edu.cn/showproblem.php?pid=1695

题意:求[a,b]和[c,d]中分别取一个数,问取到的两个数的gcd=k的对数!!其中(2,3)跟(3,2)这2种类型只算一种,视为重复

Sample Input
2
1 3 1 5 1
1 11014 1 14409 9

Sample Output
Case 1: 9
Case 2: 736427


#include <iostream>
#include <fstream>
#include <algorithm>
#include <string>
#include <set>
//#include <map>
#include <queue>
#include <utility>
#include <iomanip>
#include <stack>
#include <list>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
//#include <ctime>
#include <ctype.h>
using namespace std;
#define eps 1e-8
#define PI 3.14159265358979
#define inf 0x3fffffff
#define L 100005

long long e[L];
int prime[L][20], num[L];    //prime[i][j]储存i的第j个质因子,num[i]储存i的质因子个数

void Euler ()
{
    int i, j;
    for (i = 1; i < L; i++)    //初始化
        e[i] = i;
    for (i = 2; i < L; i++)
    {
        if (e[i] == i)    //只有素数才可进来
        {
            e[i] = i - 1;
            for (j = i << 1; j < L; j += i)    //求欧拉的同时求质因子
                e[j] = e[j] - e[j] / i, prime[j][num[j]++] = i;
        }
    }
    for (i = 2; i < L; i++)    //递推求和
        e[i] += e[i-1];
}

int dfs (int x, int b, int n)    //求[1,b]中有多少个与n非互质
{
    if (!b)
        return 0;
    int ans = 0, i;
    for (i = x; i < num[n]; i++)
        ans += b/prime[n][i] - dfs (i+1, b/prime[n][i], n);    //容斥原理
    return ans;
}

int main()
{
    int t, a, b, c, d, k, cc = 1, i;
    long long res;
    memset (num, 0, sizeof(num));
    Euler ();
    scanf ("%d", &t);
    while (t--)
    {
        scanf ("%d%d%d%d%d", &a, &b, &c, &d, &k);
        printf ("Case %d: ", cc++);
        if (!k)    //k==0下面作为分母会出大错
        {
            puts ("0");
            continue;
        }
        b /= k, d /= k;    //问题的转化,转化成求gcd=1的对数
        if (d < b)
            d ^= b, b ^= d, d ^= b;
        res = e[b];    //[1,b]和[1,b]的gcd为1的对数
        for (i = b + 1; i <= d; i++)    //求[b+1,d]与[1,b]的互质对数
            res += b - dfs (0, b, i);    //已经无法用语言形容了,我反正信了
        printf ("%I64d\n", res);
    }
    return 0;   
}
1
3
分享到:
评论

相关推荐

    hdu 1695 GCD(欧拉函数+容斥原理).docx

    "hdu 1695 GCD(欧拉函数+容斥原理)" 题目大意是:给定 a, b, c, d, k,找到一队 x, y,满足 g(x, y) = k,且 x ∈ [1, b], y ∈ [1, d],问有多少对符合要求的 (x, y)。 思路是:gcd(x, y) == k 解释 x, y 都能...

    应用容斥原理推广欧拉函数 (2015年)

    利用容斥原理对欧拉函数进行了推广,得出如下结论:1 )给出了欧拉函数的3 种初步推广,即函数φr;k (m),Ωr;k;l (m),Hr;k;l (m),找到并证明了r= 0 的 3 个表达式;2 )进一步推广了欧拉函数,得到并...

    Euler_difference.txt+前向欧拉法+后向欧拉法+中心差分法+matlab程序

    Euler_difference.txt+前向欧拉法+后向欧拉法+中心差分法+matlab程序

    诸多素数问题与容斥原理.pdf

    文档内容围绕素数筛法、欧拉函数及其推广、容斥原理等数学概念展开,且尝试着对孪生素数和哥德巴赫猜想的存在性给出解释。 在数学领域,素数一直是研究的热点,而素数筛法是素数理论研究中一种重要的数学工具。它...

    欧拉函数计算 C语言实现

    欧拉函数 C语言实现 #include "iostream" #include "math.h" #define maxsize 100 using namespace std; typedef struct node { int num; int total; }struct_num; struct_num a[maxsize]; int is_prime(int n)

    线性素筛 欧拉函数 区间筛素数.zip_sowoc_算法 欧拉函数 线性筛

    总的来说,"线性素筛 欧拉函数 区间筛素数.zip_sowoc_算法 欧拉函数 线性筛"这个压缩包文件包含了一种高效的算法实现,该算法能够在线性时间内筛选素数,并且能快速计算欧拉函数值,适用于需要处理大量素数和欧拉...

    欧拉函数公式以及证明

    欧拉函数是数论中很重要的一个函数,欧拉函数是指:对于一个正整数 n ,小于 n 且和 n 互质的正整数(包括 1)的个数,记作 φ(n) 。 完全余数集合: 定义小于 n 且和 n 互质的数构成的集合为 Zn ,称呼这个集合为...

    简化剩余系和欧拉函数.ppt

    "欧拉函数和简化剩余系" 欧拉函数是数论中重要的函数之一,它描述了正整数中与互素的整数的个数。设n是一个正整数,欧拉函数φ(n)是指在1到n之间与n互素的整数的个数。 简化剩余系是指模m下的简化剩余类的集合。...

    欧拉定理与欧拉函数证明.mp4

    视频讲解欧拉定理和欧拉函数的证明。详细解释了证明简化剩余系的关系为什么要先证明完全剩余系的关系。以及欧拉函数的计算。

    组合数学 实现 欧拉函数 cayley定理 等

    这里我们将详细探讨标题和描述中提到的几个关键概念:欧拉函数、Cayley定理、Mobius定理以及整数拆分。 1. **欧拉函数**(Euler's totient function): 欧拉函数φ(n)定义为小于n且与n互质的正整数的数量。它是...

    欧拉函数的几个性质及证明.pdf

    欧拉函数(Euler's totient function),通常表示为φ(n),是数论中一个非常重要的函数。它定义为在1到n之间(包含1和n)与n互质的正整数个数。例如,φ(1)=1,因为只有1与1互质;φ(2)=1,因为只有1与2互质;φ(3)=...

    代码实现,欧拉函数代码实现,matlab

    标题提到的"代码实现,欧拉函数代码实现,matlab",表明我们将讨论如何在MATLAB环境中实现欧拉函数。欧拉函数,通常用φ(n)表示,是计算小于或等于n且与n互质的正整数的数量,它在数论中具有重要的地位。MATLAB是一种...

    【气动学】基于matlab欧拉法+龙格库塔算法火箭飞行弹道仿真【Matlab仿真 8834期】.zip

    【气动学】基于matlab欧拉法+龙格库塔算法火箭飞行弹道仿真【Matlab仿真 8834期】.zip

    算法-数论- 欧拉函数.rar

    欧拉函数,通常用大写字母 φ 表示,是数论中一个非常重要的概念,由瑞士数学家欧拉在18世纪引入。这个函数在数论领域内有着广泛的应用,尤其是在模运算、同余类以及素数分布等方面。欧拉函数定义为:对于正整数n,...

    扩展欧几里得、模幂运算、欧拉函数

    在计算机科学和数学中,特别是在密码学和数论领域,扩展欧几里得算法、模幂运算以及欧拉函数是至关重要的工具。这些概念在解决复杂数学问题时起着核心作用,尤其是在处理整数的性质和计算上。下面我们将深入探讨这三...

    基于MATLAB实现的欧拉法计算微积分的源代码,以及改进的欧拉法+使用说明文档.rar

    基于MATLAB实现的欧拉法计算微积分的源代码,以及改进的欧拉法+使用说明文档.rar 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2020b;若运行有误...

    欧拉函数 1

    "欧拉函数 1" 欧拉函数是一种_IMPORTANT_函数在数论中,它表示 1 到 n-1 之间,与 n 互质的数的个数。在本篇文章中,我们将详细介绍欧拉函数的定义、计算方法和应用场景。 定义 欧拉函数 phi(n) 是指 1 到 n-1 ...

    初等数论中求欧拉函数值程序

    上述程序首先定义了一个计算最大公约数的gcd函数,然后在euler_phi函数中,通过循环找到所有与n互质的因数,并相应地更新欧拉函数值。在主函数中,用户输入一个整数,程序调用euler_phi计算并输出欧拉函数值。 这个...

    代码实现,欧拉函数代码实现,matlab源码.zip

    欧拉函数,通常表示为φ(n),是数论中的一个重要概念,由数学家欧拉引入。这个函数计算了小于或等于n的正整数中与n互质(最大公约数为1)的数的数量。在密码学、计算复杂性和其他数学分支中,欧拉函数有广泛的应用。...

    Euler函数前缀

    2. **乘性性质**:如果a和b互质(即gcd(a, b) = 1),那么φ(ab) = φ(a) * φ(b),这是欧拉函数的一个重要特性,使得我们能有效地计算复合数的欧拉函数值。 3. **欧拉定理**:如果a和n互质,那么a^φ(n) ≡ 1 (mod ...

Global site tag (gtag.js) - Google Analytics