CNUOJ 0486 800401反质数

难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B

试题描述

将正整数 x 的约数个数表示为 g(x)。例如,g(1)=1,g(4)=3, g(6)=4。

如果对于任意正整数y,当 0 < y < x 时,x 都满足 g(x) > g(y), 则称 x 为反质数。整数 1,2,4,6 等都是反质数。

现在任意给定两个正整数 M, N,其中,M < N <= 20000000,按从小到大输出其中(包括 M 和 N)的所有反质数。如果没有,则输出大写的NO。


输入

一行,包含两个正整数M和N,用单个空格隔开。

输出

在一行内输出所有反质数,以逗号间隔。如果没有,则输出 NO。

输入示例

1 13

输出示例

1,2,4,6,12

这题受到WXY的影响,立刻就做出来啦!哒哒哒

代码自己看,有注释,这在看不懂……就学学基础吧……相信大家都能看懂。

#include<iostream>//暴力做法,使用的WXY的做法,带了注释
using namespace std;
int n,m,t1,t2,i,j,k;//t1记录x约数 t2记录y的约数
bool flg=1,flr=1; //flg记录这个数是不是反质数,flr记录是不是第一个数,如果不是第一个要在前面补上逗号
int main()
{
    cin>>n>>m;
    for(i=n;i<=m;i++)
    {
        flg=1;//重置
        t1=0;//重置
        for(j=1;j<=i;j++) if(i%j==0) t1++;//寻找x所有约数
        for(j=1;j<i;j++)//y肯定小于x
        {
            t2=0;//重置
            for(k=1;k<=j;k++) if(j%k==0) t2++;//寻找y所有约数
            if(t2>=t1){flg=0;break;}//如果g(x)>g(y),符合条件,退出,标记
        }
        if(flg && flr){cout<<i;flr=0;}//符合条件的第一个数
        else if(flg) cout<<‘,‘<<i;//符合条件的不是第一个数,前带逗号
    }
    return 0;
}

  谢谢阅览!

时间: 2024-11-08 21:51:24

CNUOJ 0486 800401反质数的相关文章

COJ 0486 800401反质数

800401反质数 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 将正整数 x 的约数个数表示为 g(x).例如,g(1)=1,g(4)=3, g(6)=4. 如果对于任意正整数y,当 0 < y < x 时,x 都满足 g(x) > g(y), 则称 x 为反质数.整数 1,2,4,6 等都是反质数. 现在任意给定两个正整数 M, N,其中,M < N <= 20000000,按从小到大输出其中(包括

BZOJ1053 [HAOI2007]反素数 &amp; BZOJ3085 反质数加强版SAPGAP

BZOJ 1053 Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x为反质数.例如,整数1,2,4,6等都是反质数.现在给定一个数N,你能求出不超过N的最大的反质数么 ? Input 一个数N(1<=N<=2,000,000,000). Output 不超过N的最大的反质数. Sample Input 1000 Sample Output 840 题解 可以发现,

反质数问题,求不大于n的最大反质数

反质数:设f(n)表示n个约数的个数,如果对于任意x有0<x<n, f(x) < f(n),那么n就是一个反质数 我们都知道对于任意一个数n,都可以用质数乘积的形式表示出来:x = p1^k1+p2^k2...pn^kn 一个数n如果可以表示成 n = p1^k1 + p2^k2, 那么它的约数的个数就是 (k1+1)*(k2+1) ::k1个p1,可以产生k1个约数,分别是p1^1, p1^2...p1^k1, 同理k2个p2 那么这k1个约数与k2个约数分别相乘,又会得到k1*k2个

HYSBZ 1053 反质数

input n 1<=n<=2000000000 output 不大于n的最大反质数 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数. 做法:直接打表查找 1 #include <cstdio> 2 #include <queue> 3 #include <cstring> 4 #include <i

反质数

问题描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数. 现在给定一个数N,你能求出不超过N的最大的反质数么? 分析 这道试题的数学性质很强,关键点在于“一个数与其约数”的关系.在设计算法之前,我们不妨先对“一个数与其约数”进行一番简单的分析. 先举个简单的例子,求一个数756的约数总个数. 大家都知道先将756分解质因子,得到756=22×33×7

【模板】【数学】反质数

题目链接:https://www.luogu.com.cn/problem/P1463 其实反质数就是要约数最大,在此前提下这个数最小. 然后它分解出来的质数一定是连续的,并且分解出来的质数的指数是单调递减的,所以可以dfs求. 参考:https://blog.csdn.net/qq_40942372/article/details/82016727 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll;

CNUOJ 0909 HDNoip201502统计质数

HDNoip201502统计质数 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 Jam看着趣味数学书上从中心一圈圈向外盘绕的数字方阵(见示意图),忽然发现前4个质数恰好是前4个拐点,他突发奇想地猜测:“所有拐点上的数会不会都是质数?”或者“位于拐弯位置(拐点)的数中包含质数的比例很高?”你能否编程帮他解决“前n个拐点中有多少个是质数?”的问题? 示意图 7  6  5      ↓←←8  1  4      ↓↓↑9 

BZOJ 3085: 反质数加强版SAPGAP (反素数搜索)

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3085 题意:求n(<=10^100)之内最大的反素数. 思路: 优化2: int prime[]= { 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101,103,107,109, 113,127,131,137,139, 14

BZOJ 1053 反素数

Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数.现在给定一个数N,你能求出不超过N的最大的反质数么? Input 一个数N(1<=N<=2,000,000,000). Output 不超过N的最大的反质数. Sample Input 1000 Sample Output 840 HINT Source 开始没有想清楚这