题意:将输入的数n分解成质数相乘的形式
思路:打表,然后判断n是否为质数,若是则直接输出,否则将n除以最小的能整除n的质数,输出该质数,最后输出n。
#include<iostream>
#include<cmath>
using namespace std;
const int MAX = 65537;
bool isPrime[MAX+1];
int total = 0;
int prime[MAX+1];
void makePrime()
{
memset(isPrime, true, sizeof(isPrime));
memset(prime, 0, sizeof(prime));
int i, j;
for (i=2; i<=MAX; i++)
{
if (isPrime[i]) prime[total++] = i;
for (j=0; j<total && i*prime[j]<=MAX; j++)
{
isPrime[i*prime[j]] = false;
if (i%prime[j]==0) break;
}
}
}
int main()
{
makePrime();
int i, n;
while (scanf("%d", &n)!=EOF)
{
if (isPrime[n]) printf("%d\n", n);
else
{
while (!isPrime[n])
{
for (i=0; ; i++)
{
if (n%prime[i]==0)
{
printf("%d*", prime[i]);
break;
}
}
n /= prime[i];
}
printf("%d\n", n);
}
}
return 0;
}