假设n是一个正整数,它的值不超过1000000,请编写一个程序,将n分解为若干个素数的乘积。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入一个正整数n(1< n ≤1000000)。
输出格式:
每组测试对应一行输出,输出n的素数乘积表示,式中的素数从小到大排列,两个素数之间用一个“*”表示乘法。若输入的是素数,则直接输出该数。
输入样例:
2
9828
88883
输出样例:
2*2*3*3*3*7*13
88883
可以用一个循环来分解数字,然后使用一个数组来存储分解的素数,最后从这个数组中组合出素数的乘积表示式。
使用质因数分解循环。
质因数分解循环是将一个正整数分解为一组相乘 的质数的积,其中质数是指只有1和它本身两个因数的正整数。因此,使用质因数分解循环的思路是:首先,将给定的数字n除以2,如果余数是0,则该数字可以由3个素数的乘积表示;然后再除以5,以此类推,直至尝试过所有的质数,即可得到n的质因数分解式。
#include<stdio.h>
#include<math.h>
int main()
{
int n, i;
printf("Enter number:");
scanf("%d", &n);
printf("%d=", n);
for (i = 2; i <= n; i++)
{
while (n != i)
{
if (n % i == 0)
{
printf("%d", i);
n = n / i;
}
else
break;
}
}
printf("%d", n);
return 0;
}
实现
#include<stdio.h>
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
int n, i, j;
scanf("%d", &n);
for (i = 2; i <= n; i++)
{
while (n != i)
{
if (n % i == 0)
{
printf("%d*", i);
n /= i;
}
else
break;
}
}
printf("%d\n", n);
}
return 0;
}
真正
#include<stdio.h>
#include<math.h>
int is_prime(int n)
{
if(n<=1)
return 0;
int m=sqrt(n);
for(int i=2;i<=m;i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int m=sqrt(n);
for(int i=2;i<=m;i++)
while(n%i==0)
{
printf("%d",i);
n/=i;
if(n!=1)
printf("*");
}
if(n!=1)
printf("%d",n);
printf("\n");
}
return 0;
}
文章提供了一个C语言程序,用于将输入的正整数n分解为素数的乘积。程序通过质因数分解循环算法,不断将n除以2及以上的素数,直到n变为1,输出过程中素数间用*分隔。
5304

被折叠的 条评论
为什么被折叠?



