第二届太原理工大学程序设计新生赛决赛 J Fuse the Cube Fragment

题目传送门

在解密完那条古怪的序列后的不久,Vanis收到了一个奇怪的包裹,寄件人地址竟然写着火星 ()。包裹里有一堆蕴含着能量的小晶块 (Cube Fragment),经过一些实验,Vanis发现这些小晶块具有如下性质:

  1. 有n种不同的小晶块,编号1至n,每种晶块都蕴含1个单位的能量。
  2. 两种晶块(第i种和第j种)能够稳定融合,当且仅当i \nmid ji∤j且j \nmid ij∤i,其中\nmid∤表示不能整除。

Vanis想知道如果每种小晶块只使用一个,能够融合成的稳定的大晶体最大能蕴含多少个单位的能量,他想请你给出两种不同的融合方案。

两种融合方案是不同的,当且仅当至少存在一种晶块出现在一种方案中而不出现在另一种方案中。

输入描述:
输入一行一个整数n,表示小晶块的种类数。

数据规范:
5≤n≤3×10^4
.
输出描述:
输出两行,表示两种不同的融合方案,每行输出一种,使用编号表示使用哪种小晶块,每行输出内的编号之间使用一个空格符分隔。

注意:

  1. 融合顺序无关,即"3 2 5"与"3 5 2"被认为是同一种融合方案。
  2. 满足条件的融合方案可能不止有两种,任意合理的两种融合方案都会被认为是正确的。
    示例1
    输入

5

输出

3 2 5
3 4 5

示例2
输入

7

输出

2 3 5 7
4 6 5 7

思路:开始还以为是2-n之间的所有素数,后来多推几个数据发现了是后一半的数这个结论。
代码比较简单。

#include<bits/stdc++.h>
#include<unordered_map>
#include<unordered_set>
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
int sum,n;
bool isPrime( ll num )
{
    
    if(num ==2|| num==3 )   
        return 1 ;
    if(num %6!= 1&&num %6!= 5)  
        return 0 ;
    int tmp =sqrt(num);
    for(int i= 5; i <=tmp; i+=6 )   
        if(num %i== 0||num %(i+ 2)==0) 
            return 0 ;
    return 1 ;
}
int main()
{
    int n;
    cin>>n;
    if(n==5)
    {
        cout<<2<<" "<<3<<" "<<5<<endl;
        cout<<3<<" "<<4<<" "<<5<<endl;
        return 0;
    }
    for(int i=n/2+1;i<=n;i++)
        cout<<i<<" ";
    cout<<endl;
    int tem=n/2;
    for(int i=n/2;i<=n;i++)
    {
        if(i%tem==0&&i!=n/2)continue;
        cout<<i<<" ";
    }
    cout<<endl;
    system("pause");
    return 0;


}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值