我需要编写一个程序来输入一个数字,并以C
的形式输出它的阶乘4!=(2^3)*(3^1)
5!=(2^3)*(3^1)*(5^1)
我能够找到素数2,3和5,但我如何计算它们出现的次数? (^3, ^1, ^1)
代码:
int main() {
int num,i,count,n;
printf("Enter to find prime numbers: ");
scanf("%d",&n);
for(num = 2; num<=n;num++) {
count = 0;
for(i=2;i<=num/2;i++) {
if(num%i==0)
{
count++;
break;
}
}
if(count==0 && num!= 1)
printf("%d ",num);
}
return 0;
}
答案 0 :(得分:2)
不进入任何代码,我会解释你做事的方式有什么问题......
让我们说你想找到5的阶乘的素因子。所以你这样做:
5! = 2 x 3 x 4 x 5(这是你的外环(for(num =
...)
让我们说一下特定的迭代,num = 4
。然后,您在i
中进行了另一次迭代,检查每个数字,num/2
是一个因素。现在为5的小值!这不是问题。考虑更大的数字,如25!在这种情况下,您的外部循环将是:
25! = 1 x 2 x 3 x ... 22 x 23 x 24 x 25
现在你的外部迭代num
更进一步。现在考虑数字24. 24/2 = 12.你的程序将打印所有因子,将24分为12,恰好是2,3,4,6和12.我是当然,这不是你想要的。
首先,不尝试查找大数的阶乘。您将遇到溢出问题。接下来,我给你一些指示,并希望你可以自己解决问题。这是一个非常酷的问题,所以我真的希望你能解决它:
num
,您需要迭代不使用已使用的i
但使用素数组中的值。
3.1。使用 Barmar 解释的方法查找此num
可被因子整除的次数,并更新计数数组中的相应计数。 最后,我认为这是一个非常好的问题。它教你如何不遇到溢出错误,仍然能够使用计算机解决问题。它可以教你动态内存分配和内存管理技能,如果这是你想要的方式。它还可以帮助您批判性地思考问题。你不值得-1。我提高了你的评价。
进行有趣的编程,并对程序中的每个setp进行批判性思考。
干杯!
答案 1 :(得分:0)
for(num = 2; num<=n; ++num){
count = 0;
while(n % num == 0){
n /= num;
++count;
}
if(count!=0)
printf("(%d^%d)", num, count);
}