换一种方式的合数求素数因子,大神说用筛法,我直接把素数表打出来然后暴力枚举了,竟然也过了。。只不过时间很慢
#include<vector>
#include<cstdio>
using namespace std;
namespace
{
vector<int> primes;
void generate_prime()
{
primes.push_back(6);
primes.push_back(8);
int num;
for (int n = 2; 7 * n + 1 <= 300000; n++)
for (int i = 0; i < 2; i++)
{
num = i ? 7 * n + 1 : 7 * n - 1;
bool is_prime = true;
for (size_t j = 0;
j != primes.size() && primes[j] * primes[j] <= num
&& is_prime; j++)
if (num % primes[j] == 0)
is_prime = false;
if (is_prime)
primes.push_back(num);
}
}
}
int main()
{
generate_prime();
int n;
while (scanf("%d", &n), n != 1)
{
printf("%d:", n);
for (size_t i = 0; i != primes.size(); i++)
if (n % primes[i] == 0)
printf(" %d", primes[i]);
putchar('\n');
}
return 0;
}