E. Jzzhu and Apples
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Jzzhu has picked n apples from his big apple tree. All the apples are numbered from 1 to n.
Now he wants to sell them to an apple store.

Jzzhu will pack his apples into groups and then sell them. Each group must contain two apples, and the greatest common divisor of numbers of the apples in each group must be greater than 1. Of course, each apple can be part of at most one group.

Jzzhu wonders how to get the maximum possible number of groups. Can you help him?

Input

A single integer n (1 ≤ n ≤ 105),
the number of the apples.

Output

The first line must contain a single integer m, representing the maximum number of groups he can get. Each of the next m lines
must contain two integers — the numbers of apples in the current group.

If there are several optimal answers you can print any of them.

Sample test(s)
input
6
output
2
6 3
2 4
input
9
output
3
9 3
2 4
6 8
input
2
output
0

思路:这题刚開始确实想不到的。看了别人的解题报告才知道怎么搞。

由于仅仅要最大公约数>1。所以偶数的组合肯定能够。可是奇数的就有点难搞了。

假设用加倍的方法来组成一对的话那不是最多的情况。

可是多加两位就是最多的情况了,这是前20名的代码中的做法。

我没想明确。后面才感觉这得想到才行。由于奇数加两位之后为偶数的机率比較小,就不和偶数的组合情况反复了,然后又能够把奇数组合成一对。这太机智了。比赛的时候确实非常难想出来。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#include<queue>
#include<set>
#include<bitset>
#define mem(a,b) memset(a,b,sizeof(a))
#define INF 1000000070000
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int vis[100005],is[100005];
vector<pair<int,int> >v;
int main()
{
int n,i,j;
cin>>n;
for(i=4;i<=n;i+=2)
vis[i]=1;
for(i=3;i<=n;i+=2)
{
if(!vis[i])
{
if(i*2>n) break;
vector<int>a;
for(j=i;j<=n;j+=2*i)
{
vis[j]=1;
if(!is[j]) a.push_back(j),is[j]=1;
}
for(j=a.size()-1;j>0;j-=2)
{
v.push_back(make_pair(a[j],a[j-1]));
is[a[j]]=is[a[j-1]]=1;
}
if(a.size()&1)
{
v.push_back(make_pair(a[0],a[0]*2));
is[a[0]]=is[a[0]*2]=1;
}
}
}
if(n&1) n--;
int x=0,y;
for(i=n;i>0;i-=2)
{
if(is[i]) continue;
if(!x) y=i,x=1;
else x=0,v.push_back(make_pair(i,y));
}
printf("%d\n",v.size());
for(i=0;i<v.size();i++)
printf("%d %d\n",v[i].first,v[i].second);
return 0;
}

Codeforces Round #257 (Div. 2) E题:Jzzhu and Apples 模拟的更多相关文章

  1. Codeforces Round #257 (Div. 2) D题:Jzzhu and Cities 删特殊边的最短路

    D. Jzzhu and Cities time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. Codeforces Round #257 (Div. 2) A题

    A. Jzzhu and Children time limit per test 1 second memory limit per test 256 megabytes input standar ...

  3. Codeforces Round #257 (Div. 2 ) B. Jzzhu and Sequences

    B. Jzzhu and Sequences time limit per test 1 second memory limit per test 256 megabytes input standa ...

  4. Codeforces Round #257 (Div. 1)A~C(DIV.2-C~E)题解

    今天老师(orz sansirowaltz)让我们做了很久之前的一场Codeforces Round #257 (Div. 1),这里给出A~C的题解,对应DIV2的C~E. A.Jzzhu and ...

  5. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

  6. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  7. Codeforces Round #713 (Div. 3)AB题

    Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...

  8. Codeforces Round #552 (Div. 3) A题

    题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...

  9. Codeforces Round #257(Div. 2) B. Jzzhu and Sequences(矩阵高速幂)

    题目链接:http://codeforces.com/problemset/problem/450/B B. Jzzhu and Sequences time limit per test 1 sec ...

随机推荐

  1. 掀开图片显示介绍的css效果

    概述 主要运用到CSS3的3D transform等变换 详细 代码下载:http://www.demodashi.com/demo/10575.html 一.概述 1.主要运用到CSS3的3D tr ...

  2. [Table] pm_result

    ', '20160501.17:30 - 20160501.17:45', '2.1', '3.1', '3.1', '3.11', '3.44', '12.30', null, null, null ...

  3. 原创:【微信小程序】发送消息模板教程(后台以PHP示例)

    1.本教程对外开放,未经博主同意,禁止转载. 2.准备材料:1)公众号|小程序,添加选择的模板消息,2)在设置>开发设置页面,开通消息模板功能:如: 3.因为调用微信发送模板的接口是:https ...

  4. (二)Linux Shell编程——运算符、注释

    2.7 Shell运算符 Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符.原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 ...

  5. 关于iOS 热更新(热修复)你必须知道的一种方法- JSPatch

    本文为转载文章 . 版权归原文所有. 原文链接:iOS 5分钟集成热修复(JSPatch) 前言 在iOS中有很多种热修复方案,在这里我就不一一介绍了 这里有一篇介绍热修复的文章:iOS中的HotFi ...

  6. Python 的 pass 语句

    Python pass是空语句,是为了保持程序结构的完整性. pass 不做任何事情,一般用做占位语句. 例子1: if __name__ == '__main__': pass 例子2: # 输出 ...

  7. SVN 使用学习记录

    一.基本SVN操作 安装了SVN之后,在本机上点击右键,就能够看到如下信息: 1.建立SVN Repository 下面来建立一个SVN Repository.这个文件夹是同步用的,你可以放在本机的任 ...

  8. Python rpartition() 方法

    描述 Python rpartition() 方法用来根据指定的分隔符将字符串进行分割. 如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符前面的子字符串,第二个为分隔符本身,第三个为分 ...

  9. struts2.xml中所有constant详解--大全

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  10. HTML - SELECT默认选中

    除了在option中定义属性selected = "selected",还可以 <select defaultValue='2'> <option value=& ...