zoukankan      html  css  js  c++  java
  • 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;
    }
    

      谢谢阅览!

    神がいた世界、その指先で映りのは、わが身が受けた大きいこと、また「責任」と言われろ?
  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/scx2015noip-as-php/p/CNUOJ800401.html
Copyright © 2011-2022 走看看