1 条题解

  • 0
    @ 2025-8-24 22:50:16

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Larryyu
    Euphoric NocturNe |AS| ALTERing EGO

    搬运于2025-08-24 22:50:16,当前版本为作者最后更新于2023-09-10 19:51:02,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Description

    给定 nnkk,求一个 nn 的排列 p1,p2pnp_1,p_2\dots p_n,使得有恰好有 kkii,满足 gcd(i,pi)=1\gcd(i,p_i)=1

    Solution

    前置芝士:最大公约数 - OI Wiki (oi-wiki.org)

    我们知道:gcd(a,b)=gcd(b,amodb)\gcd(a,b)=\gcd(b,a\bmod b)

    因此当 a=b+1a=b+1 时,gcd(a,b)=gcd(b,amodb)=gcd(b,1)=1\gcd(a,b)=\gcd(b,a\bmod b)=\gcd(b,1)=1

    所以对于任意一对相邻的数,它们的最大公约数为 11

    那我们在 i[1,k1]i\in [1,k-1] 的位置上放 i+1i+1,在 kk 的位置放 11,在 i[k+1,n]i\in[k+1,n] 的位置上放 ii,就能满足条件。

    对于 k=0k=0 的特殊情况,我们输出 -1 即可。

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
    	int n,k;
    	cin>>n>>k;
    	if(k==0) cout<<-1<<endl;
    	else {
    		for(int i=1;i<=k;i++){
    			cout<<i%k+1<<" ";
    		}
    		for(int i=k+1;i<=n;i++){
    			cout<<i<<" ";
    		}
    	}
    	return 0;
    	
    }
    
    • 1

    信息

    ID
    9173
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者