C代码,以确定数字是否为;“强”;或不(从我的语言直译)

C代码,以确定数字是否为;“强”;或不(从我的语言直译),c,C,对,我们目前正在学习C语言中的循环。 作业内容如下(直译): “强数是那些可以用形式表示的整数 a^2 b^3,其中a和b是任意整数。强数示例: 1=1^2 1^3 4=2^21^3 8=1^2^3 32=2^2^3 675=5^2 3^3 向用户询问一个整数,并打印出该数字是否为强整数 还是不” 我在这里完全迷路了。有什么帮助吗?我想这个概念有问题。 无论如何,对于你的问题,评论有必要的答案。您可以尝试以下操作: 循环从1到根(N),存储给定数字的所有素数因子。然后循环遍历素因子,检查素因子的

对,我们目前正在学习C语言中的循环。 作业内容如下(直译):

“强数是那些可以用形式表示的整数 a^2 b^3,其中a和b是任意整数。强数示例:

1=1^2 1^3
4=2^21^3
8=1^2^3
32=2^2^3
675=5^2 3^3

向用户询问一个整数,并打印出该数字是否为强整数 还是不”


我在这里完全迷路了。有什么帮助吗?

我想这个概念有问题。 无论如何,对于你的问题,评论有必要的答案。您可以尝试以下操作:

  • 循环从1到根(N),存储给定数字的所有素数因子。然后循环遍历素因子,检查素因子的所有组合是否满足条件“N=a^2b^3”。如果它们都不满足条件,您可以继续将基本因子组合成复合因子,然后重试其中的每一个。[这是一个地狱般的解决方案,可能是我能想到的最糟糕的解决方案]
  • 从1循环到根(N),存储所有素因子以及每个素因子的出现次数。循环浏览素数因子列表,如果任何素数因子的出现次数小于2,则说“否”,否则说“是”。[这可能是您的解决方案]
  • 您可以交替使用动态规划的自底向上方法来解决这个问题。这是一个较长的答案,我认为与你的情况无关
  • 试着用这个:

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main()
    {
        int a,b,s;
        long int n;
    
    loop:
        while(scanf("%d",&n)&&(n!=0))
        {
            s=0;
            for(a=0;a<=100;a++)
                for(b=0;b<=100;b++)
                {
                    if(a*a*b*b*b==n)
                    {
                        printf("%d is strong numbers!\n",n);
                        goto loop;
                    }
                }
            printf("not the strong numbers!\n");
        }
        return 0;
    }
    
    #包括
    #包括
    #包括
    int main()
    {
    INTA,b,s;
    长整数n;
    循环:
    而(scanf(“%d”、&n)&&(n!=0))
    {
    s=0;
    
    对于(a=0;a给定的
    1^3
    =1和1^2=1

    强大的数字就是强大的

    If it is square (9 = 3^2 . 1^3)
    
    If it is cube (125 = 1^2 . 5^3)
    
    If it's prime factors are in groups of 2 or more.
    
    有一个游戏和固定的算法 因此,生成基本因子

    给定一个重复n次的素数(例如,16被分解为2.2.2.2=>2有4次出现,n=4)

    如果n==1,则它不能是多维数据集因子的一部分,这将留下一个单独的因子。 如果n为奇数,则需要删除多个立方体

     CubeFactors = floor( n/3);
     if( CubeFactors %2 == 1 )
         CubeFactors -= 3;  /* We want to remove an odd number of factors, to ensure remaining factors are even (square).*/
     n =  n - CubeFactors * 3;
    
    那么n是偶数,因此可以表示为正方形的一部分

    遍历计数的素数因子。如果任何素数因子只有1次出现,则它不是素数,否则对于任何其他计数,它可以表示为立方体、正方形或两者的组合

    a^2 => a^2
    a^3 => a^3
    a^4 => (a^2)^2
    a^5 => a^3 . a^2
    a^6 => (a^3)^2
    a^7 => a^3 . (a^2)^2
    a^8 => (a^4)^2
    a^9 => (a^2)^3
    a^10 => (a^5)^2
    a^11 => (a^3)^3 . (a^2)
    ...
    

    从数学上讲,你想检查一下,对于整数
    a
    b
    ,每个素数因子的指数是否可以写成
    2*a+3*b
    。如果是这样,这个数字就是强的,否则就不是

    它实际上比看起来要简单得多。首先,请注意,任何大于1的整数都可以写成
    2*a+3*b
    ,因此您只需要查看是否有任何素数因子只出现一次

    在实现方面,您可以更简单地从2开始检查并删除所有因素

    下面是一个不会溢出的高效实现。如果
    n
    强,则返回1;如果不强,则返回0:

    int is_strong(int n)
    {
        int f, c;
    
        for (f = 2; f <= n/f; f++) {
            c = 0;
            while (n % f == 0) {
                n /= f;
                c++;
            }
            if (c == 1) {
                return 0;
            }
        }
    
        return n == 1;
    }
    
    int是强的(int n)
    {
    int f,c;
    
    对于(f=2;f请先表现出一些努力。如果你有一些代码是你编写的,但不起作用,请发布它。我怀疑你的意思是
    4=2^2 1^3
    ?我不知道如何解决这个问题,这就是为什么我不能表现出任何努力的原因。如果我知道如何处理这个问题,我就能够解决它,而不需要寻求帮助。我想我我必须做一些类似于“for”的循环检查x^2*y^3,以查看是否有任何内容与用户输入的数字匹配,但正如我所说的,我不确定这是否是正确的方法。是的,大卫,我的不好。好吧,既然1^3=1(和1^2=1),你可以看出N的a或b的最大值必须是√因此,在最坏的情况下,您可以循环1。。√为a和b中的每一个定义N,看看它们是否匹配。不过,你应该能够做得更好。你可以编辑这个问题,并修复David指出的打字错误。整数100是大小,你可以用这个:#定义大小100来决定你想要的范围。这只是一个详尽的搜索,因子限制在100或更少。有很多h比这更有效的解决方案。还有,为什么你使用
    goto
    而不是
    continue
    ?这是非常糟糕的风格。对不起,我认为他只是想了解循环。我不关心效率。好吧,真正的问题是这个解决方案根本不起作用。例如,试着给它1024*1024。你无法列举所有可能的事实我只关心循环和结果……这不适用于32,也就是2**5。