forked from daiwb/Algorithm
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path203.cpp
More file actions
89 lines (81 loc) · 1.82 KB
/
203.cpp
File metadata and controls
89 lines (81 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <cmath>
using namespace std;
#define REP(i,n) for(int i=0;i<(n);++i)
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define RFOR(i,a,b) for(int i=(a);i>=(b);--i)
typedef long long LL;
LL plist[300000],pcount=0;
int prime(LL n){
LL i;
if ((n!=2&&!(n%2))||(n!=3&&!(n%3))||(n!=5&&!(n%5))||(n!=7&&!(n%7)))
return 0;
for (i=0;plist[i]*plist[i]<=n;i++)
if (!(n%plist[i]))
return 0;
return n>1;
}
void initprime(){
LL i;
for (plist[pcount++]=2,i=3;i<3500000;i++)
if (prime(i))
plist[pcount++]=i;
REP(i,pcount) plist[i] *= plist[i];
}
LL mm[55], dd[55];
vector<LL> nums;
bool op(LL n) {
return n % 4 == 0 || n % 9 == 0 || n % 25 == 0 || n % 49 == 0;
}
void run() {
initprime();
cout << pcount << " " << plist[pcount - 1] << endl;
nums.clear();
int idx = 1;
mm[0] = mm[1] = 1;
nums.push_back(1);
while (true) {
++idx;
if (idx > 50) break;
memcpy(dd, mm, sizeof(mm));
mm[0] = mm[idx] = 1;
FOR(i,1,idx-1) {
mm[i] = dd[i] + dd[i - 1];
nums.push_back(mm[i]);
}
}
sort(nums.begin(), nums.end());
nums.erase(unique(nums.begin(), nums.end()), nums.end());
nums.erase(remove_if(nums.begin(), nums.end(), op), nums.end());
LL ret = 0;
REP(i,nums.size()) {
bool flag = true;
REP(j,pcount) {
if (plist[j] > nums[i]) break;
if (nums[i] % plist[j] == 0) {
flag = false;
break;
}
}
if (flag) {
cout << i << " " << nums[i] << endl;
ret += nums[i];
} else {
cout << "**" << i << " " << nums[i] << "**" << endl;
}
}
cout << ret << endl;
//cout << nums.size() << endl;
//REP(i,nums.size()) cout << nums[i] << endl;
}
int main () {
run();
return 0;
}