题目大意:分解质因数,题目保证只有一个大于 1000000 的因子,即自身。
解题思路:素数打表判断是因数则输出,未除尽就输出原数。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
int prime[1000000];
int is[1000000];
int main() {
int cnt = 0;
for (int i = 2; i < 1000000; i++)
if (!is[i]) {
prime[cnt++] = i;
for (int j = i * 2; j < 1000000; j += i)
is[j] = 1;
}
long long n;
while(scanf("%lld", &n) != EOF) {
if (n < 0) break;
int tag = 0;
while (tag < cnt && prime[tag] <= n) {
while (n % prime[tag] == 0) {
printf(" %d\n", prime[tag]);
n /= prime[tag];
}
tag++;
}
if (n > 1) printf(" %lld\n", n);
printf("\n");
}
return 0;
}
觉得这个代码简单很多:
侵删。UVA10392-大数分解 by primo_001
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
using namespace std;
int main() {
long long n;
while(scanf("%lld",&n) && n > 0){
for(long long i = 2; i <= sqrt(n); i++)
if (n % i == 0) {
printf(" %lld\n", i);
n /= i;
i = 2;
}
printf(" %lld\n", n);
printf("\n");
}
return 0;
}