如何用C语言计算输入数字的质数乘积并输出结果
解决质数乘积的问题
你只需要添加一个变量来存储质数的乘积,并在找到每个质数时更新这个乘积即可。这里推荐用long long类型,避免输入较大数字时乘积溢出。
修改后的代码如下:
#include <stdio.h> int main() { int number; int prime; int i, j; // 初始化乘积为1,乘法的单位元是1 long long product = 1; printf("Insert number:"); scanf("%d", &number); printf("Prime numbers of %d are: ", number); for(i = 2; i <= number; i++) { prime = 1; // 优化:j循环到sqrt(i)比i/2更高效,减少循环次数 for(j = 2; j * j <= i; j++) { if(i % j == 0) { prime = 0; break; // 找到因子直接跳出循环,无需继续判断 } } if(prime == 1) { printf(" %d", i); // 将当前质数乘到乘积中 product *= i; } } // 打印最终的乘积结果 printf("\nProduct of these primes: %lld", product); return 0; }
关键改动说明:
- 新增
long long product = 1;:用长整型存储乘积,防止大数字溢出;初始值设为1,因为任何数乘1都不会改变其值。 - 在质数判断为真的分支里添加
product *= i;:每次找到质数就更新乘积。 - 循环结束后新增打印语句,输出最终的乘积。
- 额外优化了质数判断的内层循环:把
j <= i/2改成j * j <= i,并添加break,减少不必要的循环次数,提升效率。
内容的提问来源于stack exchange,提问作者SkkyDMG
相关产品推荐
相关产品推荐

