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