047题:
题意:
首次出现连续两个数均有两个不同的质因数是在:
14 = 2 × 7
15 = 3 × 5
首次出现连续三个数均有三个不同的质因数是在:
644 = 22 × 7 × 23
645 = 3 × 5 × 43
646 = 2 × 17 × 19
首次出现连续四个数均有四个不同的质因数时,其中的第一个数是多少?
思路:
有一下两个思路:
一.先预处理前1e6个素数,然后从1开始往后遍历每个数,如果满足连续四个数的素因子种类都为4,就返回并输出,时间复杂度为O(n*m),n为预处理的1e6,m为找到的那个数
二.利用线性筛框架,把标记数组改为记录该数有多少种不同素因子的数组。时间复杂度为O(n + m)
代码:
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include <algorithm>
#define ll int64_t
#define d int32_t
#define r return
#define N 1000005
#define mem(a) memset(a, 0, sizeof(a))
using namespace std;
d prime[N]; //记录1e6范围内的全部素数
d book[N]; //book[i]记录数字i由多少种不同素因子相乘得到
void init() {
mem(prime);
mem(book);
for (d i = 2; i < N; i++) {
if (!book[i]) {
book[i] = 1;
prime[++prime[0]] = i;
}
for (d j = 1; j <= prime[0] && prime[j] * i < N; j++) {
if (i % prime[j] == 0) {
book[prime[j] * i] = book[i];
break;
}
book[prime[j] * i] = book[i] + 1;
}
}
r;
}
d main() {
init();
for (d i = 2; i < N - 4; i++) {
if(book[i] == 4 && book[i + 1] == 4 && book[i + 2] == 4 && book[i + 3] == 4) {
printf("%" PRId32"\n", i);
break;
}
}
r 0;
}
答案是:134043
如果有写的不对或者不全面的地方 可通过主页的联系方式进行指正,谢谢