zoukankan      html  css  js  c++  java
  • TOJ 1258 Very Simple Counting

    Description

    Let f(n) be the number of factors of integer n.

    Your task is to count the number of i(1 <= i < n) that makes f(i) = f(n).

    Input

    One n per line (1 < n <= 1000000).

    There are 10000 lines at most.

    Output

    For each n, output counting result in one line.

    Sample Input

    4
    5
    

    Sample Output

    0
    2
    

    Hint

    f(1) = 1, f(2) = f(3) = f(5) = 2, f(4) = 3.

    Source

    ZOJ Monthly 2009.12

    比赛的一道题目,一看到这种题目就头晕了。

    后来看了别人的解题报告,cjx才有了点思路。

    首先要记录下每个数的因子的个数,然后把因子的个数当做下标的索引。这样就可以记录与当前数的因子数相同的因子的个数。

    这样子还不够,发现每次记录的时候都需要通过f[i]先去找他因子的个数是多少,放到输入里面还会超时。

    果断继续打表,用s[i]来记录比i小且当前i因子数相同的个数。

    #include <stdio.h>
    #define MAXN 1000001
    
    int f[MAXN]={0};
    int s[MAXN]={0};
    int c[MAXN]={0};
    
    int main()
    {
        //先求出每个数的因子数 
        for(int i=1; i<MAXN; i++){
            for(int j=1; i*j<MAXN; j++){
                f[i*j]++;
            }
        }
        //统计比i小且因子数相同的数  
        for(int i=1; i<MAXN; i++){
            s[i]=c[f[i]];
            c[f[i]]++;
        }
        int n;
        while( scanf("%d",&n)!=EOF ){
            printf("%d
    ",s[n]);
        } 
        return 0;
    }
  • 相关阅读:
    Jenkins 插件管理
    持续集成 目录
    gitlab 目录
    jenkins 目录
    POJ 2828
    POJ 2782
    POJ 2725
    POJ 2769
    POJ 2739
    POJ 2707
  • 原文地址:https://www.cnblogs.com/chenjianxiang/p/3561693.html
Copyright © 2011-2022 走看看