• 【题解】P5535 【XR-3】小道消息


    题目

    题目描述

    小 X 想探究小道消息传播的速度有多快,于是他做了一个社会实验。

    有 n 个人,其中第 i 个人的衣服上有一个数 i+1。小 X 发现了一个规律:当一个衣服上的数为 i 的人在某一天知道了一条信息,他会在第二天把这条信息告诉衣服上的数为 j 的人,其中 gcd(i,j)=1(即 i,j的最大公约数为 1)。在第 0 天,小 X 把一条小道消息告诉了第 k 个人,小 X 想知道第几天时所有人都会知道这条小道消息。

    可以证明,一定存在所有人都知道了这条小道消息的那一天。

    提示:你可能需要用到的定理——伯特兰-切比雪夫定理。

    输入格式

    一行 2 个正整数 n,k。

    数据范围:

    2≤n≤10^14

    1≤k≤n。

    输出格式

    一行一个正整数,表示答案。

    输入输出样例

    输入 #1

    3 1

    输出 #1

    2

    输入 #2

    6 4

    输出 #2

    1

    分析

    第i个人身上的数是i+1,i最小是1,所以k+1最小是2

    告诉第k个人,他身上的数是k+1,以下对k+1操作

    伯特兰-切比雪夫定理

    若整数n > 3,则至少存在一个质数p,符合n < p < 2n − 2。另一个稍弱说法是:对于所有大于1的整数n,存在一个质数p,符合n < p < 2n

    这里使用第一条

    对k+1分类讨论,

    1.若k+1是个质数

       1)若(n/2 < k+1 <= n),那么就算是k+1的2倍,也比n大,所以在[1,n]里没有k+1的倍数。则只需要一天,k+1就能把消息告诉所有人

       2)若(k+1<=n/2),那么k+1的二倍在[1,n]里,在[1,n]里有k+1的倍数。k+1需要一天把消息告诉所有不是它倍数的数,并且没有两个k+1的倍数是相邻的,所以在第二天k+1的倍数两边相邻的数可以把消息告诉他们,总共需要两天

    2.若k+1是个合数
    k+1肯定不是2,也不是3,那么k+1 > 3,满足伯特兰-切比雪夫定理的要求
    根据定理,必有一素数p,满足([/frac{n}{2}] < p < n)(n>=2),而p与任何不是它倍数的数互质。这里p的2倍已经大于n了,所以[1,n]里没有p的倍数,所以p和k+1互质,那么k+1花一天告诉p,转化为第一种情况,p再用一天告诉所有人,总共两天。

    对p讨论完毕,答案只可能是1或2

    代码实现

    
    #include <cmath>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #define F(a,b,c) for(int a = b; a <= c; a++)
    #define UF(a,b,c) for(int a = b; a >= c; a--)
    using namespace std;
    typedef long long ll;
    ll n, k;
    bool prime(ll k){//判断质数 
    	for(ll i = 2; i <= sqrt(k); i++){
    		if(k % i == 0)	return 0;	
    	}
    	return 1;
    }
    int main(){
    	cin >> n >> k;
    	n++;
    	k++;
    	if(prime(k) && k > n / 2){//第一种情况 
    		cout << 1 << endl;
    		return 0;
    	} 
    	if(prime(k)){//第二种情况 
    		cout << 2 << endl;
    		return 0;
    	}
    	else{//第三种情况 
    		cout << 2 << endl;
    	}
    	return 0;
    }
    
    
    
    

    有错请指出!

  • 相关阅读:
    java8 parallel并行处理实战
    java相关技术问答(二)
    [安卓基础] 007.管理Activity的生命周期
    [Python基础]009.os模块(1)
    [Objective-C] 012_数据持久化_XML属性列表,NSUserDefaults
    SD.Team团队人物形象
    读Pyqt4教程,带你入门Pyqt4 _013
    [Objective-C] 011_数据持久化_NSKeyedArchiver
    [Objective-C] 010_Foundation框架之NSSet与NSMutableSet
    [JavaWeb基础] 007.Struts2的配置和简单使用
  • 原文地址:https://www.cnblogs.com/ZhengkunJia/p/12368486.html
Copyright © 2020-2023  润新知