栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++——素数(质数)专题训练3

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++——素数(质数)专题训练3

作者有话说:中午间隙,新增一道还不错的质数题目。


反质数

【题目描述】(求解因数个数,小规模版)

对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。即整数1的因子个数为1个,整数6的因子个数为4个。

如果某个正整数x满足:g(x) > g(i)   0

比如:对于整数 1 2 3 4 5 6 而言,它们的因子个数分别为 1 2 2 3 2 4 ,因此只有 1 ,2  , 4  ,6 为反质数。

因为对于整数2而言,2的因子个数比它前面正整数的因子和都大,整数3和整数2的因子和个数相等,因此整数3不是反质数。

现在给定一个数N,你能求出不超过N的最大的反质数么?

【输入】

一个数N(1<=N<=1000)。

【输出】

不超过N的最大的反质数。

【样例输入】

1000

【样例输出】 

840

易错点:

大部分学生对反质数的概念容易混淆,满足反质数的条件是:反质数的因子个数要大于比它小的所有整数的因子个数,而不是仅仅前一个数的因子个数!

#include
using namespace std;
int main()
{ 
    int n,g[1001],s=0,f,max=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    	s=0;//每判断一个整数的因子数量需要清零 
    	for(int j=1;j<=i;j++)
    	{
    		if(i%j==0) s++;//计算因子个数 
		}
		g[i]=s;//存入一位数组 
	}
	for(int i=1;i<=n;i++)
	{
		if(g[i]>max)//满足反质数的条件:g(x)>g(i)  0 

优化版:

#include
using namespace std;
int g[1001];//保证一维数组清零 
int main()
{ 
    int n,f,max=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
    	for(int j=1;j<=i;j++)
    	{
    		if(i%j==0) g[i]++;//计算因子个数 存放在数组中 
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(g[i]>max)//满足反质数的条件:g(x)>g(i)  0 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/655598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号