因为学校有C语言作业 而我又不太想写 于是就直接csdn一下 结果遇到了三四个写的有问题的代码 大致错误统一如下:
代码如下:
#include<stdio.h>
int Isprime(int n)
{
for (int i = 2; i < n / 2; i++)
if (n % i == 0) return 1;
return 0;
}
void fun(int n)
{
int i = 0, j;
int m = n;
for (j = 2; j < m / 2; j++)
while (n % j == 0)
{
printf("%d", j);
if (n / j > 2) printf("*");
n /= j;
}
}
int main()
{
int n;
int c;
scanf("%d", &n);
c = Isprime(n);
if (c) fun(n);
else printf("it is a prime\n");
}
不难看出 直接带入6的话 fun函数一遍后 n = 3, j = 2那么n%j=1;就会跳出循环。
所以我自己改善了一下代码
#include<stdio.h>
int fun(int n) //调用函数分解质因数
{
int i = 0, j; //定义整数型用作循环
int m = n; //定义整数型用作记录本来的数
int x = n;
printf("%d=", n); //输出需要分解的质因数
for (j = 2; j <= m / 2; j++) //循环找其质数
{
while (n % j == 0) //如果该数可被整除 则循环
{
printf("%d", j); //打印其中一个因式的数
x = n;
n /= j;
for (i = j; j <= m / 2; j++)
{
if (n % j == 0) //
{
printf("*");
break;
}
}
}
}
return n;
}
int main()
{
int n;
scanf("%d", &n);
fun(n);
return 0;
}
添加了判断下一个分解质因数的大小与本次找到的质因数大小相比较
如果大于等于本次质因数,那么可以继续进行分解质因数的步骤。
于是我更“细致”的发现,奇数不能进行质因数分解,所以又加上了判断奇数的函数。
#include<stdio.h>
int Isprime(int n) //函数功能--判断是否为素数
{
for (int i = 2; i < n / 2; i++)
if (n % i == 0) return 1;
return 0;
}
int fun(int n) //函数功能--质因数分解
{
int j;
int m = n;
for (j = 2; j < m / 2; j++) //从小到大寻找n的因数
while (n % j == 0) //当n%j(因数)== 0时,继续分解
{
printf("%d*", j);
n /= j;
}
return n;
}
int main()
{
int n;
int c;
scanf("%d", &n); //输入要分解的数
c = Isprime(n); //判断是否为素数
{
if (c)
{
printf("%d", fun(n)); //如果不是素数则进行分解
}
else printf("it is a prime\n"); //如果是素数则不用分解
}
}