[英]Prime factorization, changing output.
大家好,我有这段代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned int num,i,j;
int a=0;
printf("Please input a number: ");
scanf("%d",&num);
printf("The Prime Factorization: ");
for (i=2;i<=num;i++){
if (num%i==0){
a=1;
if (i==num){
printf(" %ld ",num);
} else {
printf(" %ld *",i);
num/=i;
}
}
}
if (a==0){
printf("%ld ",num);
}
return 0;
}
假设我输入40,它给了我
素数分解:2 * 4 * 5
这是正确的,但是我如何使其将“ 2 * 4 * 5”输出为“ 2 ^ 3 * 5”?
由于素数在因式分解中可以出现多次,因此您不能不先测试当前素数就继续移动到下一个候选项,直到该数不再可被其除。
为了获得理想的打印输出,可以保留一个count变量,如下所示:
#include <stdio.h>
int main(void) {
unsigned int num,i,count;
int a=0;
printf("Please input a number: ");
scanf("%d",&num);
printf("The Prime Factorization: ");
i = 2;
while(num>1){
if (num%i==0){
a=1;
count = 1;
num /= i;
// Exhaust each prime fully:
while (num%i==0) {
count++;
num /= i;
}
printf("%ld",i);
if (count > 1) {
printf(" ^ %ld", count);
}
if (num > 1) {
printf(" * ");
}
}
i++;
}
if (a==0){
printf("%ld ",num);
}
return 0;
}
像这样的东西:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int num,i,j,count=0;
int a=0;
printf("Please input a number: ");
scanf("%d",&num);
printf("The Prime Factorization: ");
for (i=2;i<=num;i++){
count=0;
a=0;
while(num%i==0){
a=1;
++count;
num/=i;
}
if(a==1)
{
printf("%d ^ %d *",i,count);
}
}
if (a==0){
printf("%ld ",num);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.