CF449 C. Jzzhu and Apples
生活随笔
收集整理的這篇文章主要介紹了
CF449 C. Jzzhu and Apples
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 /*
2 http://codeforces.com/problemset/problem/449/C
3 cf 449 C. Jzzhu and Apples
4 數論+素數+貪心
5 */
6 #include <cstdio>
7 #include <algorithm>
8 using namespace std;
9 const int Nmax=100005;
10 int is_prime[Nmax];
11 int book[Nmax];
12 int cnt[Nmax];
13 int n,ans;
14 void get__prime()
15 {
16 for(int i=2;i<=n;i++)
17 is_prime[i]=1;
18 for(int i=2;i<=n;i++)
19 {
20 if(is_prime[i])
21 {
22 for(int j=2;j*i<=n;j++)
23 {
24 is_prime[i*j]=0;
25 }
26 }
27 }
28 }
29
30 int main()
31 {
32 //freopen("cf449C.in","r",stdin);
33 scanf("%d",&n);
34 get__prime();
35 for(int i=n;i>=2;i--)
36 {
37 if(is_prime[i])
38 {
39 cnt[i]=1;
40 for(int j=2;i*j<=n;j++)
41 {
42 if(!book[i*j])
43 {
44 cnt[i]++;
45 book[i*j]=1;
46 }
47 }
48 if(cnt[i]&1)
49 book[2*i]=0;
50 ans+=cnt[i]>>1;
51 }
52 }
53 printf("%d\n",ans);
54 for(int i=1;i<=n;i++)
55 book[i]=0;
56 for(int i=n;i>=2;i--)
57 {
58 if(is_prime[i] && cnt[i]>1)
59 {
60 if(cnt[i]&1)
61 {
62 int flag=1;
63 for(int j=1;i*j<=n;j++)
64 {
65 if(j==2)
66 continue;
67 if(!book[i*j])
68 {
69 printf("%d",i*j);
70 if(flag)
71 printf(" ");
72 else
73 printf("\n");
74 flag^=1;
75 book[i*j]=1;
76 }
77 }
78 }
79 else
80 {
81 int flag=1;
82 for(int j=1;i*j<=n;j++)
83 {
84 if(!book[i*j])
85 {
86 printf("%d",i*j);
87 if(flag)
88 printf(" ");
89 else
90 printf("\n");
91 flag^=1;
92 book[i*j]=1;
93 }
94 }
95 }
96 }
97 }
98 return 0;
99 }
?
轉載于:https://www.cnblogs.com/BBBob/p/6611033.html
總結
以上是生活随笔為你收集整理的CF449 C. Jzzhu and Apples的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: StringUtil 字符串处理工具
- 下一篇: Spring 注解AOP 入门