zcmu1100:互质(引出两种方法:欧拉函数和最大公约数找质数)#后期将会写一篇欧拉函数的专题,本片仅为欧拉函数的导入和简单初应用,敬请期待

Description

给定正整数n,有多少个小于等于n的正整数与n互质,两个数互质的条件为两个数只有1这个共同的因子.

Input

多组测试数据,每组仅一行,为正整数n.(n<=100000)

Output

对于每组数据输出有多少个与n互质的数

Sample Input

9

Sample Output

6

解析一:欧拉函数

#include <stdio.h>

int eulerFunction(int n) {
    int result = n;//表示初始的欧拉函数值 ,表示初始时用于n互质的数的个数为n 
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            while (n % i == 0) {
                n /= i;
            }
            result -= result / i;
        }
    } 
    if (n > 1) {
        result -= result / n;
    }
    return result;
}

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        int count = eulerFunction(n);
        printf("%d\n", count);
    }
    return 0;
}

当我们计算一个数 n 的欧拉函数时,我们需要找到小于等于 n 的所有与 n 互质的数的个数。代码中的算法通过遍历 n 的质因数来计算欧拉函数的值。下面是算法的详细解释:

  1. 首先,我们初始化一个变量 result 为 n,表示初始时与 n 互质的数的个数为 n。
  2. 然后,我们从 2 开始遍历到 sqrt(n)(平方根),对于每个数字 i,我们判断它是否是 n 的质因数(即 n 能被 i 整除)。
  3. 如果 i 是 n 的质因数,那么我们执行以下操作:
    • 将 result 减去 result / i,这是因为我们要去除与 i 相关的质因数的贡献。例如,如果 n=12,i=2,那么 2 是 12 的质因数,12 中有两个 2 因子,即 223=12,所以与 2 相关的质因数的贡献为 2/2=1,我们要将 result 减去这个贡献。
    • 然后,我们通过不断将 n 除以 i,去除 n 中所有的 i 因子。这样做是为了确保我们只计算每个质因数的贡献一次。例如,对于 n=12,我们先除以 2,得到 n=6,然后再除以 2,得到 n=3,这样我们就去除了所有的 2 因子。
  4. 如果 n 大于 1,说明 n 是一个大于 sqrt(n) 的质因数,那么我们将 result 减去 result / n 的贡献。这是因为 n 是一个大于 sqrt(n) 的质因数,所以它的贡献还没有被计算过。
  5. 最后,我们返回最终的 result 值,即为欧拉函数的计算结果。

通过以上步骤,我们可以计算出给定数 n 的欧拉函数的值。代码中的 while 循环用于读取用户输入的整数 n,并计算对应的欧拉函数值,然后输出结果。直到用户输入的整数为 EOF(文件结束标志)时,程序才会退出

解析二.最大公因数

#include <stdio.h>

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

int main() {
    int n;
    while (scanf("%d", &n) != EOF) {
        int count = 0;
        for (int i = 1; i <= n; i++) {
            if (gcd(i, n) == 1) {
                count++;
            }
        }
        printf("%d\n", count);
    }
    return 0;
}

这段代码是一个计算欧拉函数的示例程序。让我逐步解释它的功能。

  1. 首先,代码包含了一个名为 gcd 的函数,用于计算两个数的最大公约数。它使用了欧几里得算法来实现。如果其中一个数为 0,则返回另一个数作为最大公约数;否则,递归地调用 gcd 函数,将第二个数和两个数相除的余数作为参数。

  2. 在 main 函数中,代码使用了一个循环来读取输入的整数 n,直到遇到文件结束符为止(EOF)。每次读取一个整数 n 后,都会执行以下操作:

    a. 初始化一个变量 count,用于记录与 n 互质的数的个数。

    b. 使用一个循环从 1 到 n 遍历所有可能的数 i。

    c. 对于每个数 i,调用 gcd(i, n) 函数来计算 i 和 n 的最大公约数。如果最大公约数为 1,说明 i 和 n 是互质的,将 count 值加一。

    d. 循环结束后,输出 count 的值,即与 n 互质的数的个数。

  3. 程序继续读取下一个整数 n,并重复执行上述步骤,直到遇到文件结束符为止。

这个程序的目的是计算给定

### 回答1: zcmu 1093 简单计算器是一道编程题目,要求实现一个简单的计算器,能够进行加、减、乘、除四种基本运算。该题目主要考察编程基础能力和算法思维能力,需要熟练掌握基本的运算符和控制语句,能够设计合理的算法实现计算器功能。 ### 回答2: zcmu 1093 简单计算器是一种基于计算机技术的工具,用于进行基本算术运算,如加减乘除等。它能够简化我们在日常生活中的计算工作,提高计算效率,减少出错率。 使用zcmu 1093 简单计算器非常简单,只需输入需要计算的数字和符号,就能够得到计算结果。它可以进行多个数字之间的复杂运算,同时还支持小数、百分数、平方根等复杂运算。另外,zcmu 1093 简单计算器还可以存储中间计算结果,方便我们进行多步计算或调整计算过程。 除了日常的计算工作,zcmu 1093 简单计算器还可用于科学计算、工程设计等领域。许多专业软件都是基于简单计算器原理设计的,它们具有更高的计算精度和更复杂的运算能力,能够支持更高级别的科学计算和技术分析。 总之,zcmu 1093 简单计算器在日常生活中有着广泛的应用,它使我们的计算工作变得更加高效、准确。并且,随着科技的不断发展,这种计算工具也在不断地更新和改进,为我们的计算工作提供更加便捷、多样化的选择。 ### 回答3: ZCMU 1093 简单计算器是一道基础的算法题目,需要实现一个简单的计算器程序,支持加、减、乘、除四种基本运算,可以对两个整数进行运算并输出结果。 要实现这道题目,首先需要根据输入的运算符来判断应该进行的运算类型,并根据运算符的不同,执行不同的计算操作。同时,应注意除数不能为零的情况,避免程序出现异常。 在编程序的过程中,可以使用 switch case 语句来判断不同的运算类型,并执行相应的计算操作。同时,为了能有效地判断输入的运算符,可以使用输入字符串的方式进行处理,提取出运算符进行比较。 此外,在程序中还需要进行合法性判断,确保输入的数字均为整数且在合理的范围内,以避免程序运行出现异常情况。同时,还需要考虑输入格式的问题,应确保输入的数字和运算符符合题目要求。 综上所述,ZCMU 1093 简单计算器是一道基础的算法题目,需要实现一个简单的计算器程序,支持加、减、乘、除四种基本运算,注意程序的合法性判断和输入格式的处理,能够熟练地运用 switch case 等语句完成程序的编
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值