【题意】:对一个数进行因式分解。
【思路】:打表后一个一个除,最大数是65535,所以10000的质数范围苟用。
【AC代码】:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iomanip>
using namespace std;
#define MAX 10000
int cnt;
int prime_list[MAX];
int isPrime(int x)
{
int i = 0;
for (i = 2; i <= sqrt(x*1.0); i++)
{
if (0 == x%i)
return 0;
}
return 1;
}
void MakeList()
{
int i = 0;
for (i = 2; i < 65535; i++)
{
if (isPrime(i))
prime_list[cnt++] = i;
}
}
int main()
{
int x = 0;
MakeList();
while (cin >> x)
{
int i = 0;
int flag = 1;
while (x != 1)
{
for (i = 0; i < cnt; i++)
{
if (0 == x%prime_list[i])
{
if (flag)
cout << prime_list[i];
if (!flag)
cout << "*" << prime_list[i];
flag = 0;
x /= prime_list[i];
break;
}
}
}
cout << endl;
}
return 0;
}
注意:error C2668: "sqrt" : 对重载函数的调用不明确。是由于sqrt调用里边如果是int,比如乘1.0转换成double.