编写程序,输出一个整数的全部素数因子。要求判断是否为素数,素数的判断用函数prime()函数。如整数120的素数因子为2 2 2 3 5。
这个你用bing一搜不全都是嘛。下面是个普通写法,要追求效率在改写
#include <stdio.h>
int prime(int n)
{
if (n < 2)
return 0;
for (int i = 2; i < n; i++)
{
if (n % i == 0)
return 0;
}
return 1;
}
void factor(int n)
{
for (int i = 2; n > 1; i++)
{
if (n % i == 0 && prime(i))
{
printf("%d ", i);
n /= i;
i--;
}
}
}
int main()
{
int n;
printf("整数是多少: ");
scanf("%d", &n);
factor(n);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:/* 使用函数求100以内的全部素数 */
#include <stdio.h>
#include <math.h> /* 调用求平方根函数,需要包含数学库 */
int main(void)
{
int count, m;
int prime(int m); /* 函数声明 */
count = 0; /* count记录素数的个数,用于控制输出格式 */
for(m = 2; m <= 100; m++){
if(prime(m)!=0){ /* 调用prime(m)判断m是否为素数 */
printf("%6d", m); /* 输出m */
count++; /* 累加已经输出的素数个数 */
if (count %10 == 0) printf("\n"); /* 如果count是10的倍数,换行 */
}
}
printf("\n");
}
/* 定义判断素数的函数,如果m是素数则返回1("真");否则返回0("假")*/
int prime(int m)
{
int i, n;
if(m == 1) return 0; /* 1不是素数,返回0 */
n = sqrt(m);
for( i = 2; i <= n; i++)
if (m % i == 0){ /* 如果m不是素数 */
return 0; /* 返回0 */
}
return 1; /* m是素数,返回1 */
}
我可以解决该问题。
解决方案如下:
首先需要定义一个判断素数(质数)的函数,参考段落1中的prime()函数。
接下来输入需要分解质因数的整数n,按照素数因子从小到大依次进行除法运算,如果结果为整数,则输出该素数因子,并把n重新赋值为运算后的结果,重复以上操作直到无法继续除尽为止。具体实现参考以下代码:
int prime(int m) {//判断素数的函数,参考段落1 int i, n; if(m == 1) return 0;
n = sqrt(m); for( i = 2; i <= n; i++)
if (m % i == 0){
return 0;
} return 1;
}
int main() { int n,i; printf("please input the integer n:");//输入需要分解质因数的整数n scanf("%d",&n); for(i=2;i<=n;i++){//从2开始枚举素数 if(prime(i)){//如果i是素数 while(n%i==0){//不断进行除以i的运算,直到无法再整除 printf("%d ",i); n=n/i;//更新n的值 } } } return 0; }
以上代码使用了循环结构进行素数枚举和连续的除法运算,同时利用了prime()函数判断素数。具体实现可以根据输入的整数n和需要分解的素数不同而得到不同结果。