某国王对囚犯进行大赦,让一狱吏n次通过一排锁着的n间牢房,每通过一次,按所定规则转动n间牢房中的某些门锁, 每转动一次, 原来锁着的被打开, 原来打开的被锁上;通过n次后,门锁开着的,牢房中的犯人放出,否则犯人不得获释。
转动门锁的规则是这样的,第一次通过牢房,要转动每一把门锁,即把全部锁打开;第二次通过牢房时,从第二间开始转动,每隔一间转动一次;第k次通过牢房,从第k间开始转动,每隔k-1 间转动一次;问通过n次后,哪些牢房的锁仍然是打开的?

分析

转动门锁的规则可以有另一种理解,第一次转动的是编号为1的倍数的牢房;第二次转动的是编号为2的倍数的牢房;第三次转动的是编号为3的倍数的牢房;……则狱吏问题是一个关于因子个数的问题。
令d(n)为自然数n的因子个数,这里不计重复的因子,如4的因子为1,2,4共三个因子,而非1,2,2,4。则d(n)或为奇数,或为偶数,见下表:
数学模型1:d(n)有的为奇数,有的为偶数,由于牢房的门开始是关着的,这样编号为i的牢房,所含1——i之间的不重复因子个数为奇数时,牢房最后是打开的;反之,牢房最后是关闭的。

再此基础上我们发现当且仅当n为完全平方数时,d(n)为奇数;这是因为n的因子是成对出现的,也即当n=a*b且a≠b时,必有两个因子a,b; 只有n为完全平方数,也即当n=a2时,才会出现d(n)为奇数的情形

我们把数分为1 质数 不是质数 1只有一次 质数因为都为本身和1相乘所以必为偶数次 非质数则也可构成由两个数相乘但只有当一个数为完全平方数时会有两个因子相同则总因子数为奇数

只需找出小于n的平方数即可

answer:

#include<iostream>using namespace std;int main()
{int n;cin>>n;for(int i=1;i*i<=n;i++){cout<<i*i<<" 释放"<<endl;}return 0;}

牢房问题 C++(寻找总因子数为奇数的数)相关推荐

  1. 寻找第n个默尼森数。

    寻找第n个默尼森数. 代码格式如下: def prime(num): - def monisen(no): - - return xxx print(monisen(int(input()))) # ...

  2. 寻找数组中第k大的数

    题目:有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数. 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在. 测试样例: [1,3,5,2 ...

  3. 三种方法寻找数组前K个最大的数

    package com.Test;import java.util.ArrayList; import java.util.Arrays; import java.util.List;//给定一个长度 ...

  4. Leetcode215 寻找数组中第K大的数

    题目描述 给定一个数组A,要求找到数组A中第K大的数字. 思路:对于这种题目,其实有多种解法 方法1:对数组A进行排序,然后遍历一遍就可以找到第K大的数字.该方法的时间复杂度为O(N*logN) 方法 ...

  5. java寻找数组中第k大的数

    快速排序思想,先找数组第k小的数,当执行一次partition函数找到index下标时,index左边的数比arr[index]小,右边的数比arr[index]大 public class Test ...

  6. 寻找三个整数中的“中”数

    设给定三个整数a,b,c,试写出寻找其"中"数的一个算法(用C/C++描述),并分析在平均情况与最坏情况下,算法分别要进行多少次比较? 分析: 由于A,B,C中每一个为中数的概率均 ...

  7. 寻找数组中第K大的数,时间复杂度O(N)

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 有道题目寻找第K大,我用这3种方法都做了一遍. 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大 ...

  8. python查找第k大的数_寻找数组中第K大的数

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大的数字.该方法的时间复杂度为O(N*logN) ...

  9. 【C++】寻找并输出11~999之间的数m,它满足m、m^2和m^3均为回文数。

    代码: #include<iostream> #include<math.h> using namespace std;int main() {int m;int huiwen ...

最新文章

  1. Java遍历对象所有属性
  2. [原创]一种自动地将继承自NSObject的自定义类序列化成JSON的方法
  3. RocketMQ的安装与配置
  4. 第九章 利用化学知识制药
  5. python程序多次运行_Python内怎么使同一个.py文件多次运行?
  6. python dataframe排序_python – Pandas DataFrame排序忽略了这种情况
  7. python输入一行字符串、剔除其中所有小写字母后输出_1. 输入一行字符串,将其中的非字母字符剔除,然后将字母全部转换为大写字母,并...
  8. chrome浏览器下audio自动播放的hack
  9. java项目介绍_3月Github最热门的10个Java开源项目
  10. 阿里免费开放一切AI算力的背后是什么?
  11. Atitit 团队工具链体系打造---提升团队效率的一些通用软件 attilax总结
  12. 上海市城镇生育保险办法
  13. 关于电脑使用的实用技巧
  14. moss2007升级到moss2010之准备
  15. android8.1刷机工具,DX200固件AndroidV8.1 Beta-V2刷机工具包
  16. 深度挖坑系列之三:人脸识别,角度空间,欧氏空间,margin
  17. 图形验证码接口及其重构思想
  18. 【Linux】查看二进制文件内容
  19. PYTHON----输出指定的英文字母
  20. 利用Matlab进行图像变换(傅里叶变换、余弦变换)

热门文章

  1. Office 2010 Toolkit V2.3.2 英文绿色免费版
  2. 如何利用Shell脚本对Ubuntu操作系统进行常规初始化和系统优化及其安全加固(适用于等保2.0)
  3. 【洛谷P7096】泸沽寻梦【异或 哈希】
  4. Optimus—多学科仿真集成与优化设计平台
  5. 罗门机器人_大乐透专家官网软件
  6. 桌面应用程序——绘制彩虹
  7. 五篇教你掌握spring之三:详解Spring的bean以及注解开发
  8. SAP 成本计算概念
  9. 利用phpstudy安装dvwa
  10. Feathers框架 2:Guides -- A Chat Application