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. RHEL和Centos常用版本

    学而优则仕,思则进步也Q Redhat: http://pan.baidu.com/s/1qXKRqqS Centos: http://pan.baidu.com/s/1o8RrjXw

  2. WIFI: N, Legacy and AC

    N选项 N spec allows for 20MHz wide channels similar to previous specs but can also combine two 20MHz c ...

  3. TouchID 指纹解锁

    概述 TouchID 指纹解锁 详细 代码下载:http://www.demodashi.com/demo/10701.html 一.软硬件支持 指纹验证功能的最低硬件支持为iPhone5s, iPa ...

  4. 用sed替换文件中的空格

    请教sed 替换问题 请教各位如何替换多个空格为一个字符,如一个文件中间隔符有是一个空格,有的地方是多个空格,想全部用“|”替换,如何处理,请指教 请教sed 替换问题 [code]sed '/ \+ ...

  5. XMLHttpRequest cannot load ...谷歌浏览器跨域问题

    HTML页面通过Ajax调用公网web服务时,浏览器请求发送成功,但是响应的 xhr.status==0,控制台报错如下 XMLHttpRequest cannot load http://ws.we ...

  6. js firstChild 、nextSibling、lastChild、previousSibling、parentNode

    nextSibling下一个兄弟节点 previousSibling上一个兄弟 parentNode父亲节点 <select><option value="zs" ...

  7. Eclipse智能提示设置

    最近公司电脑上的Eclipse没有了自动提示功能,也不是全部不提示,大多数情况下按下“alt+/”键还会产生提示,但是当我在java项目中邪main方法和syso的时候,“alt+/”则会失效,今天在 ...

  8. 使用Xcode、Android Studio将项目链接到Git

    一.使用Android Studio创建本地git仓库: 1.检查本地git环境:在Android Studio中setting-->Version Control 点击Test按钮,提示suc ...

  9. [原创]JAVA技巧:去除ArrayList<Object>里面的重复记录

    简单说明 ArrayList中保存的是某种类型的对象,如User,现在需要将对象属性userid重复的都去掉,使userid唯一,要如何处理? 实现步骤 代码如下方所示,实现一个Comparator的 ...

  10. How to set JAVA environment variables in Linux or CentOS

    How to set JAVA environment variables JAVA_HOME and PATH in Linux After installing new java (jdk or ...