用C程序检查一个功率是否等于另一个功率

我正在编写一段代码,将幂的基数和幂作为参数,并检查是否存在幂数较低且幂数等于它的幂(最大幂为100),到目前为止,我已经编写了此代码:

#include <stdio.h>
#include <math.h>

int equalPower(int base, int esp);

int main(){
    if(equalPower(100,40))
        printf("Unique\n");
    else
        printf("Not unique\n");
    return 0;
}

int equalPower(int base, int esp){
    int i, j;
    for(i = 2; i <= sqrt(base); i++){
        for(j = 2; j <= 100; j++){
            if(pow(base,esp) == pow(i,j))
                return 0;
        }
    }
    return 1;
}

(我知道,就性能而言,它可以进行改进,但是它也应该以这种方式工作。)

如您所见,我正在测试100 ^ 40,等于10 ^ 80,但是程序会打印出“ Unique”。我显然缺少了一些东西。起初我以为100 ^ 40之类的幂太大而无法执行测试,但是我对此进行了单独测试,并且效果很好。我不知道为什么函数不返回0。

路易斯·马苏埃利(Luis Masuelli)

该解决方案并不暗示使用,pow()因为比较浮点数几乎总是不准确的。取而代之的是,您必须回到代数知识,并且由于您使用的是整数值,因此我将为您提供仅整数的解决方案,这将使您的精度没有问题。

您必须考虑基础,看看它本身是否就是力量。否则,您将一无所获。拿着这个:

a ^ b == c ^ d

一个基本的代数事实是,对于两个相等的数字,分解该数字应得出相同的结果。因此,要检查两个幂实际上是否相同,您需要:

a ^ b == (a1 * a2 * a3 * ... * an) ^ b = c ^ d

值a1,a2,a3,...,an是赋给正整数指数的质因子(不允许为0)。这将与以下内容相同:

a ^ b = a1 ^ b * a2 ^ b * a3 ^ b * ... * an ^ b

让我们检查一下它们是否与相同c ^ d

c ^ d = c1 ^ d * c2 ^ d * c3 ^ d * ... * cn ^ d

假设an和cn的排序方式相同,则这是一个定理,如果两个数相等,您将获得完全相同的表示形式。因此,您将要检查是否:

an ^ b = cn ^ d

对于每个n,您将很快发现cn ^(something)== an。这意味着log(cn,an)将是一个(数学上的)整数值。这意味着root(x, an) == cn(我不记得实际的名称)或pow(cn, x) == an,每个an和cn都有一个固定的整数x值。但是,由于存在浮点错误,因此我将不使用pow()。

这意味着:您只需要检查底数,而不是指数,并对照另一个底数进行检查:

int check_power(int base, int exponent) {
    if (base == 1) {
        puts("Dude! for 1, the trivial solution is 1^x for every x!");
        return 1;
    }
    for(int newbase=0, newbase<100; newbase++) {
       int newexponent = 0;
       int power = 1;
       while (power < base) {
           power = power * newbase;
           exponent++;
       }
       if (power == base) {
           printf("found! base: %d, exponent: %d", newbase, newexponent * exponent);
           return 1;
       }
    }
    puts("nothing found");
    return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Selenium-检查一个WebElement是否等于另一个WebElement

来自分类Dev

如何检查一个值是否大于或等于另一个?

来自分类Dev

通过传递关系检查一个对象是否等于另一个对象

来自分类Dev

如何检查一个日期是否小于或等于Javascript中的另一个日期

来自分类Dev

检查一个值是否等于Django模板中另一个数字的模

来自分类Dev

给定一个列表计算n个功率集

来自分类Dev

检查模板参数是否等于另一个模板参数的基类

来自分类Dev

PHP检查cookie值是否等于另一个变量

来自分类Dev

检查XML元素是否等于另一个XML元素,忽略空值

来自分类Dev

检查文件是否存在,不为空并且等于另一个

来自分类Dev

C 指针不等于另一个

来自分类Dev

Matlab符号-检查一个函数是否可以用另一个表示

来自分类Dev

检查向量是否包含另一个向量

来自分类Dev

检查值是否在另一个表中

来自分类Dev

检查MovieClip是否在另一个之上

来自分类Dev

检查目录是否包含另一个目录

来自分类Dev

检查元组列表是否是另一个的子集

来自分类Dev

检查班级是否扩展了另一个班级

来自分类Dev

检查文件是否在另一个网站上

来自分类Dev

检查treeNode是否是另一个节点的祖先

来自分类Dev

检查div是否为另一个的后代

来自分类Dev

检查向量是否包含另一个向量

来自分类Dev

检查班级是否扩展了另一个班级

来自分类Dev

在C中将一个变量设置为等于另一个变量

来自分类Dev

检查一个数组是否是另一个数组的子集(但检查一个属性)

来自分类Dev

你如何检查一个列表的项目是否等于同一列表中的另一个项目

来自分类Dev

检查用户是否使用了另一个提供程序的firebase

来自分类Dev

检查程序的另一个实例是否已在运行

来自分类Dev

如何检查另一个应用程序是否正在使用文件?

Related 相关文章

  1. 1

    Python Selenium-检查一个WebElement是否等于另一个WebElement

  2. 2

    如何检查一个值是否大于或等于另一个?

  3. 3

    通过传递关系检查一个对象是否等于另一个对象

  4. 4

    如何检查一个日期是否小于或等于Javascript中的另一个日期

  5. 5

    检查一个值是否等于Django模板中另一个数字的模

  6. 6

    给定一个列表计算n个功率集

  7. 7

    检查模板参数是否等于另一个模板参数的基类

  8. 8

    PHP检查cookie值是否等于另一个变量

  9. 9

    检查XML元素是否等于另一个XML元素,忽略空值

  10. 10

    检查文件是否存在,不为空并且等于另一个

  11. 11

    C 指针不等于另一个

  12. 12

    Matlab符号-检查一个函数是否可以用另一个表示

  13. 13

    检查向量是否包含另一个向量

  14. 14

    检查值是否在另一个表中

  15. 15

    检查MovieClip是否在另一个之上

  16. 16

    检查目录是否包含另一个目录

  17. 17

    检查元组列表是否是另一个的子集

  18. 18

    检查班级是否扩展了另一个班级

  19. 19

    检查文件是否在另一个网站上

  20. 20

    检查treeNode是否是另一个节点的祖先

  21. 21

    检查div是否为另一个的后代

  22. 22

    检查向量是否包含另一个向量

  23. 23

    检查班级是否扩展了另一个班级

  24. 24

    在C中将一个变量设置为等于另一个变量

  25. 25

    检查一个数组是否是另一个数组的子集(但检查一个属性)

  26. 26

    你如何检查一个列表的项目是否等于同一列表中的另一个项目

  27. 27

    检查用户是否使用了另一个提供程序的firebase

  28. 28

    检查程序的另一个实例是否已在运行

  29. 29

    如何检查另一个应用程序是否正在使用文件?

热门标签

归档