C语言分解任意给定整数的素因子?

不知道如何才可以做到任意输入,

输入的第一行含一个正整数k(1<=k<=10),表示测试例的个数,后面紧接着k行,每行对应一个测试例,包含一个正整数x输出:每个测试例对应一行输出,输出x的素数乘积表示式,式中的素数从小到大排列,两个素数之间用“*”表示乘法。

该回答引用ChatGPT


#include <stdio.h>
#include <math.h>

int is_prime(int x) {
  int i;
  for (i = 2; i <= sqrt(x); i++) {
    if (x % i == 0) {
      return 0;
    }
  }
  return 1;
}

int main() {
  int k, x, i;
  scanf("%d", &k);
  while (k--) {
    scanf("%d", &x);
    for (i = 2; i <= x; i++) {
      if (x % i == 0 && is_prime(i)) {
        printf("%d", i);
        x /= i;
        i--;
        if (x > 1) {
          printf("*");
        } else {
          break;
        }
      }
    }
    printf("\n");
  }
  return 0;
}


供参考:

#include <stdio.h>
int isprime(int n)
{
    int i;
    if (n < 4)  return n > 1;
    for (i = 2;i * i <= n; i++)
        if (n % i == 0) return 0;
    return 1;
}
int main()
{
    int x, i, n, k;
    scanf("%d", &k);
    while (k--){
        scanf("%d", &x);
        i = 2;n = 0;
        while (x != 1)
        {
            if (x % i == 0)
            {
                if (isprime(i))
                    printf(n++ == 0? "%d" : "*%d", i);
                x /= i;
            }
            else
                i++;
        }
        if (n)  printf("\n");
    }
    return 0;
}

1.is_prime判断是否是素数
2.find_prime该数m不是素数时,寻找区间[2 ,m]之间的素数
3.accumulate_prime寻找非素数的素数乘积因子
4.clear清除数组中的元素
#include <stdio.h>#include <math.h>int is_prime(int x);int find_prime(int *a1,int x);int accumulate_prime(int *b1,int *c1,int x);int clear(int *d1);int main(void){ int i,j,n,a[10],b[10],c[10]; int *e=a; int *f=b; int g=c; for(i=0;i<10;i++){ a[i]=0; b[i]=0; c[i]=0; } scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(i=0;i<10;i++){ if(a[i]!=0){ if(is_prime(a[i])==1){ printf("%d %d\n",a[i],a[i]); }else{ printf("%d ",a[i]); find_prime(f,a[i]); accumulate_prime(f,g,a[i]); for(j=0;j<10;j++){ if(c[j]!=0){ printf("%d*",c[j]); } } printf("\n"); } } clear(f); clear(g); } } int is_prime(int x){ int i; for(i=2;i<=sqrt(x);i++){ if(x%i==0){ return 0; } } return 1;}int find_prime(int *a1,int x){ int i,m,j; for(i=2;i<=x;i++){ m=0; for(j=2;j<=sqrt(i);j++){ if(i%j==0){ m=1; } } if(m==0){ *a1=i; a1=a1+1; } }}int accumulate_prime(int *b1,int *c1 ,int x){ int i,t; for(i=0;i<10;i++){ if(*b1!=0){ if(x%*b1==0){ x/=(*b1); *c1=*b1; c1++; }else{ b1++; } } } for(i=0;i<10;i++){ if(*c1>(c1+1)){ t=*c1; c1=(c1+1); *(c1+1)=t; c1=c1+1; } } }int clear(int *d1){ for(int i=0;i<10;i++){ *d1=0; d1++; }}