E. Jzzhu and Apples

time limit per test: 1 seconds
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 ≤ 10^5)\), 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.

input

6

output

2
6 3
2 4

input

9

output

3
9 3
2 4
6 8

input

2

output

0

题意

给出正整数\(n\),求出\(\left[1,n\right]\)之间的正整数有多少对数字的最大公约数不等于\(1\),输出最多的组数,并按任意顺序输出这些数字

思路

要使\(gcd(x,y)>1\),那么\(x,y\)中的较小的数一定不大于\(n/2\),所以我们首先筛出来\([1,n/2]\)范围内的素数

筛出来素数之后,每次在取数的时候,要保证取完数之后,不会使总的符合要求的数对减少,所以我们从最大的素数(假设为\(x\))开始枚举,能够整除\(x\)的整数一定使最少的,而且不会影响到别的数对(感性理解一下:因为枚举到了\(n/2\),所以\(n/x<=3\),\(2\)的倍数还是很多的减少一个没什么影响,\(n/x=3\)时,大概只有\(n=9\)的时候,那么也是不会产生影响的)

然后去统计当前素数\(p\)的倍数个数\(num\),如果\(num\)是偶数,直接匹配(为了简便,就相邻的两个数组成一对)

如果\(num\)是奇数,我们可以将\(p\)的\(2\)倍和\(num\)倍交换位置,这样匹配完剩下的那个数可以去和\(2\)的倍数来匹配,这样可以达到最优

代码

#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define ms(a,b) memset(a,b,sizeof(a))
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e6+10;
const int mod=1e9+7;
const int maxm=1e3+10;
using namespace std;
int vis[maxn];
int prime[maxn];
int cnt;
int a[maxn];
void get_prime(int n)
{
vis[0]=vis[1]=1;
for(int i=2;2*i<=n;i++)
if(!vis[i])
for(int j=2;j*i*2<=n;j++)
vis[j*i]=1;
for(int i=2;2*i<=n;i++)
if(!vis[i])
prime[cnt++]=i;
}
int main(int argc, char const *argv[])
{
#ifndef ONLINE_JUDGE
freopen("/home/wzy/in", "r", stdin);
freopen("/home/wzy/out", "w", stdout);
srand((unsigned int)time(NULL));
#endif
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin>>n;
get_prime(n);
ms(vis,0);
vector<pair<int,int> >ve;
for(int i=cnt-1;i>=0;i--)
{
int tot=0;
for(int j=prime[i];j<=n;j+=prime[i])
if(!vis[j])
a[++tot]=j;
// 如果倍数有奇数个,交换第二个和最后一个
if(tot&1)
swap(a[2],a[tot]);
for(int j=1;j+1<=tot;j+=2)
{
vis[a[j]]=vis[a[j+1]]=1;
ve.push_back({a[j],a[j+1]});
}
}
cout<<ve.size()<<endl;
for(auto i:ve)
cout<<i.first<<" "<<i.second<<endl;
#ifndef ONLINE_JUDGE
cerr<<"Time elapsed: "<<1.0*clock()/CLOCKS_PER_SEC<<" s."<<endl;
#endif
return 0;
}

Codeforces 450E:Jzzhu and Apples(构造,数学)的更多相关文章

  1. CF 450E Jzzhu and Apples 数学+模拟

    E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. Codeforces 449C Jzzhu and Apples 贪心 (看题解)

    Jzzhu and Apples 从大的质因子开始贪心, 如果有偶数个则直接组合, 如果是奇数个留下那个质数的两倍, 其余两两组合. #include<bits/stdc++.h> #de ...

  3. [codeforces] 449C Jzzhu and Apples

    原题 质因数分解后贪心即可(最后贪2) #include<cstdio> #include<vector> #include<stack> #include< ...

  4. Codeforces Round #257 (Div. 2) E题:Jzzhu and Apples 模拟

    E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Codeforces 449.C Jzzhu and Apples

    C. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. CF449C Jzzhu and Apples (筛素数 数论?

    Codeforces Round #257 (Div. 1) C Codeforces Round #257 (Div. 1) E CF450E C. Jzzhu and Apples time li ...

  7. CF449 C. Jzzhu and Apples

    /* http://codeforces.com/problemset/problem/449/C cf 449 C. Jzzhu and Apples 数论+素数+贪心 */ #include &l ...

  8. CodeForces 450B Jzzhu and Sequences (矩阵优化)

    CodeForces 450B Jzzhu and Sequences (矩阵优化) Description Jzzhu has invented a kind of sequences, they ...

  9. Codeforces C. Jzzhu and Cities(dijkstra最短路)

    题目描述: Jzzhu and Cities time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

随机推荐

  1. Python | 迭代器与zip的一些细节

    首先抛出一个困扰本人许久的问题: nums = [1,2,3,4,5,6] numsIter = iter(nums) for _ in zip(*[numsIter]*3): print(_) pr ...

  2. javaWeb - 3 — JSP (技术已淘汰)— 更新完毕

    1.jsp 在servlet中说过java中前端到后台有两条路线嘛 后台 <------ ajax.json <--------- 前端 后台 <------ jsp( EL.JST ...

  3. eclipse上点击open Perspective找不到java EE的解决办法

    原因:没有安装java ee等插件 Help--->Install New software---->work  with中选择All Available  Sites---->  ...

  4. mysql报错max_connections错误

    SELECT @@MAX_CONNECTIONS AS 'Max Connections';set GLOBAL max_connections=10000; show status like '%t ...

  5. Android EditText软键盘显示隐藏以及“监听”

    一.写此文章的起因 本人在做类似于微信.易信等这样的聊天软件时,遇到了一个问题.聊天界面最下面一般类似于如图1这样(这里只是显示了最下面部分,可以参考微信等),有输入文字的EditText和表情按钮等 ...

  6. 【分布式】Zookeeper的Leader选举-选举过程介绍(经典的Paxos算法解析)

    一.前言 前面学习了Zookeeper服务端的相关细节,其中对于集群启动而言,很重要的一部分就是Leader选举,接着就开始深入学习Leader选举. 二.Leader选举 2.1 Leader选举概 ...

  7. 【Linux】【Commands】trouble shooting命令详解目录

    1. 简介 1.1. 最近看到阿里的运维招聘需要熟练掌握以下的命令,我就针对这几个命令做一下总结,有些命令我觉得别人总结的挺好了,我就不赘述了 1.2. 还有一些其他我觉得用得到的命令的用法会在第三部 ...

  8. “==” 和 equals()的区别

    ※ "==" 和 equals()的区别 ※ == :比较. 基本数据类型比较的是值:. 引用类型比较的是地址值. ※ equals(Object o):1)不能比较基本数据类型, ...

  9. ActiveMQ(二)——ActiveMQ的安装和基本使用

    一:安装 2.启动之后成功 二.创建实例测试ActiveMQ 配置Maven所需的依赖 <dependency> <groupId>org.apache.activemq< ...

  10. 【Matlab】取整函数:fix/round/floor/ceil

    fix-向零方向取整.(向中间取整) round-向最近的方向取整.(四舍五入) floor-向负无穷大方向取整.(向下取整) ceil-向正无穷大方向取整.(向上取整)