以乘法格式显示的质因数
Prime Factors displayed in multiplication format
这是一项作业,所以我只是 post 问题的详细信息和我的代码就在它下面,这样你们就可以比我自己解释问题更容易理解。
Q) 任何大于 1 的整数要么是质数,要么可以通过质数相乘得到。例如:16 = 2 x 2 x 2 x 2 = (2^4) 17 = (17^1) 18 = 2 x 3 x 3 = (2^1) x (3^2) 写一个C程序,primeFactor.c,要求用户输入一个大于 1 的整数并显示其质因数的乘积。
示例交互如下:
输入一个有效数字 (>1): 18
18 = 1 x (2^1) x (3^3)
请输入有效数字 (>1): 0
号码无效。
请输入有效数字 (>1):19
19 = 1 x (19^1)
int readNum(int num)
{
if (num <= 1)
{
return printf("Invalid Number.");
}
else
{
return printf("%i = ", num);
}
}
int pcount = 0;
bool isPrime(int prime)
{
bool p_flag = false;
for(int i = 2; i < prime; i++)
{
if(prime % i == 0)
{
pcount += 1;
}
}
if (pcount > 0)
{
p_flag = false;
}
else if (pcount == 0)
{
p_flag = true;
}
return p_flag;
}
int findPrimeCount(int num, int prime)
{
int freq = 1;
printf("1 ");
for(prime = 2; prime < num; prime++)
{
freq = 1;
while((num % prime) == 0)
{
printf(" * (%i ^ %i)", prime, freq);
num = num / prime;
freq++;
}
}
if(num != 1)
{
printf(" * (%i ^ 1)", num);
}
return num;
}
int main(void)
{
int number = 0;
printf("Enter a valid number (>1): ");
scanf("%i", &number);
readNum(number);
if(isPrime(number) == 1)
{
printf("1 * (%i ^ 1)", number);
}
else if (isPrime(number) == 0)
{
findPrimeCount(number, 2);
}
return 0;
}
现在我想我被困在如果我输入数字 64 输出将是:
64 = 1 * (2^1) * (2^2) * (2^3) * (2^4) * (2^5) * (2^6)
我希望输出只是:
64 = 1 * (2^6)
我不确定我将如何在此之前截断字符串输出,或者甚至可能避免完全打印出整个内容。非常感谢任何帮助!
在您的 findPrimeCount
函数中,只需将 print
语句放在 while
循环之外,这样它只会打印 factor^highestFreq
:
int findPrimeCount(int num, int prime)
{
int freq = 1;
printf("1 ");
for(prime = 2; prime < num; prime++)
{
freq = 1;
while((num % prime) == 0)
{
num = num / prime;
freq++;
}
// only print the last iteration
// subtract 1 to frequency to equalize
// the last freq++.
freq--;
// filter out num^0
if(freq > 0)
{
printf(" * (%i ^ %i)", prime, freq);
}
}
if(num != 1)
{
printf(" * (%i ^ 1)", num);
}
return num;
}
对于输入 = 64 个输出:
64 = 1 * (2 ^ 6)
输入 = 46 输出:
46 = 1 * (2 ^ 1) * (23 ^ 1)
这是一项作业,所以我只是 post 问题的详细信息和我的代码就在它下面,这样你们就可以比我自己解释问题更容易理解。
Q) 任何大于 1 的整数要么是质数,要么可以通过质数相乘得到。例如:16 = 2 x 2 x 2 x 2 = (2^4) 17 = (17^1) 18 = 2 x 3 x 3 = (2^1) x (3^2) 写一个C程序,primeFactor.c,要求用户输入一个大于 1 的整数并显示其质因数的乘积。
示例交互如下:
输入一个有效数字 (>1): 18
18 = 1 x (2^1) x (3^3)
请输入有效数字 (>1): 0
号码无效。
请输入有效数字 (>1):19
19 = 1 x (19^1)
int readNum(int num)
{
if (num <= 1)
{
return printf("Invalid Number.");
}
else
{
return printf("%i = ", num);
}
}
int pcount = 0;
bool isPrime(int prime)
{
bool p_flag = false;
for(int i = 2; i < prime; i++)
{
if(prime % i == 0)
{
pcount += 1;
}
}
if (pcount > 0)
{
p_flag = false;
}
else if (pcount == 0)
{
p_flag = true;
}
return p_flag;
}
int findPrimeCount(int num, int prime)
{
int freq = 1;
printf("1 ");
for(prime = 2; prime < num; prime++)
{
freq = 1;
while((num % prime) == 0)
{
printf(" * (%i ^ %i)", prime, freq);
num = num / prime;
freq++;
}
}
if(num != 1)
{
printf(" * (%i ^ 1)", num);
}
return num;
}
int main(void)
{
int number = 0;
printf("Enter a valid number (>1): ");
scanf("%i", &number);
readNum(number);
if(isPrime(number) == 1)
{
printf("1 * (%i ^ 1)", number);
}
else if (isPrime(number) == 0)
{
findPrimeCount(number, 2);
}
return 0;
}
现在我想我被困在如果我输入数字 64 输出将是:
64 = 1 * (2^1) * (2^2) * (2^3) * (2^4) * (2^5) * (2^6)
我希望输出只是:
64 = 1 * (2^6)
我不确定我将如何在此之前截断字符串输出,或者甚至可能避免完全打印出整个内容。非常感谢任何帮助!
在您的 findPrimeCount
函数中,只需将 print
语句放在 while
循环之外,这样它只会打印 factor^highestFreq
:
int findPrimeCount(int num, int prime)
{
int freq = 1;
printf("1 ");
for(prime = 2; prime < num; prime++)
{
freq = 1;
while((num % prime) == 0)
{
num = num / prime;
freq++;
}
// only print the last iteration
// subtract 1 to frequency to equalize
// the last freq++.
freq--;
// filter out num^0
if(freq > 0)
{
printf(" * (%i ^ %i)", prime, freq);
}
}
if(num != 1)
{
printf(" * (%i ^ 1)", num);
}
return num;
}
对于输入 = 64 个输出:
64 = 1 * (2 ^ 6)
输入 = 46 输出:
46 = 1 * (2 ^ 1) * (23 ^ 1)