尽量找出更多的小于200的奇数n,使得C(n,⌊n/2⌋),不能被一个素数的平方整除。
要睡了看到这个问题,大致给下思路吧(其实就是懒得自己写代码)
解题过程大致可以分为以下几步:
第一步,定义一个求解组合数的函数。
函数输入只需要一个n,输出使得C(n,⌊n/2⌋)。这部分实现直接百度c或者c++求解组合数的代码就好。网上方法很多,c++与c的代码很多基本操作很相似(但这是两门完全不一样的语言!),只要没有使用c++的一些特定库或者功能的,都只要把头文件include改一下就可以在c上跑
实现时要注意是奇数,只需要执行100个数的计算
第二步,获取素数。
素数的判断那就有的说了,素数的快速判断一直都是数学上很恼人的课题。所以求法选择哪种就基于你询问答案的需求来了。如果你只是要个结果,你甚至可以从2到200暴力破解,稍微要讲究一点效率,可以参考网上一些思路,知乎或者CSDN都有素数计算的方法。至于更简单的,你可以直接使用一个数组(最low)或者其他更好的容器存储200以内的所有素数,总共46个。这里最好将素数一次性求完,放进一个容器备用。
第三步,计算。
小程序的话这一步可以放到main函数里就好。由于是不能被素数的平方整除,这里我们需要分析一下(if语句实现):
①组合数小于素数平方:必定不整除
②组合数等于素数平方:必定整除
③组合数大于素数平方:可能整除可能不整除
之后考虑编程:
对从1到199的100个奇数,首先求组合数函数的结果,然后执行100轮循环,每一轮循环从最小的素数平方值到不大于组合数的最大素数平方值求余,当素数平方值大于组合数时,计数器(例如sum)增加1(即这个奇数的组合数满足条件),并且进入下一个组合数的循环;当余数不为0,计算下一个素数平方值的余;当余数等于0时,计数器不变,进入下一个组合数的循环(即这个奇数的组合数不满足条件)。最后输出sum,sum就是满足条件的情况总数(如果你要知道准确的是哪些数的话,只需要在执行计数的同时,将那个奇数存入另一个容器内就好了)
码字不易,望采纳,谢谢!
C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html