不知道如何才可以做到任意输入,
输入的第一行含一个正整数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++; }}