Very Simple Counting


Time Limit: 1 Second      Memory Limit: 32768 KB

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

  1. 4
  2. 5

Sample Output

  1. 0
  2. 2

Hint

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


Author: WU, Jun
Source: ZOJ Monthly, December 2009

理论依据:

zoj的题目,对时间和空间的要求都很高。

这一题,首先做的时候,超时。

不看时间,不看数据,直接枚举,不超时是不可能。

根据的公式和上一题福州大学oj那一题是一样的。

贴一下超时代码吧,留个纪念。

  1. //超时代码
  2.  
  3. #include<stdio.h>
  4. #include<stdlib.h>
  5.  
  6. int f[];
  7. int Num_Euler(int n)
  8. {
  9. int num=,k,i;
  10. for(i=;i*i<=n;i++)
  11. if(n%i==)
  12. {
  13. k=;
  14. while(n%i==)
  15. {
  16. k++;
  17. n=n/i;
  18. }
  19. num=num*k;
  20. }
  21. if(n!=)
  22. num=num*;
  23. return num;
  24. }
  25.  
  26. void make_ini()
  27. {
  28. int i;
  29. for(i=;i<=;i++)
  30. f[i]=Num_Euler(i);
  31. }
  32. int main()
  33. {
  34. int n,i,num;
  35. make_ini();
  36. while(scanf("%d",&n)>)
  37. {
  38. num=;
  39. for(i=;i<n;i++)
  40. if(f[i]==f[n])
  41. num++;
  42. printf("%d\n",num);
  43. }
  44. return ;
  45. }

后来想用筛选法来筛一次,然后求值。第一次写的时候,也错了。

  1. void make_NumEuler()
  2. {
  3. int i,j,k;
  4. for(i=;i<=;i++)
  5. opl[i]=;
  6. for(i=;i<=len;i++)
  7. for(j=prime[i],k=;j<=;j=j+prime[i],k++)
  8. opl[j]=opl[j]*k;
  9. }

思路是有的,就是没有写出来,(⊙o⊙)…
最后的代码:

  1. #include<iostream>
  2. #include<map>
  3. #include<cstdio>
  4. #include<cstdlib>
  5. #include<cstring>
  6.  
  7. using namespace std;
  8.  
  9. bool s[];
  10. int num[];
  11. int ans[];//个数
  12. int f[];
  13. map<int,int>Q;
  14.  
  15. void make_ini()
  16. {
  17. int i,j,k;
  18. for(i=;i<=;i++)
  19. {
  20. num[i]=i;
  21. ans[i]=;
  22. f[i]=;
  23. }
  24. for(i=;i<=;i++)
  25. if(s[i]==false)//是素数
  26. {
  27. for(j=i;j<=;j=j+i)//枚举每个素数的倍数
  28. {
  29. // if(j%i==0) //这个肯定成立,不需要
  30. {
  31. k=;
  32. while(num[j]%i==)
  33. {
  34. num[j]=num[j]/i;
  35. k++;
  36. }
  37. ans[j]=ans[j]*k;
  38. }
  39. s[j]=true;
  40. }
  41. }
  42. for(i=;i<=;i++)
  43. {
  44. k=ans[i];
  45. if(Q.find(k)==Q.end())
  46. {
  47. Q[k]=;
  48. }
  49. else Q[k]++;
  50. f[i]=Q[k];
  51. }
  52. }
  53.  
  54. int main()
  55. {
  56. int n;
  57. make_ini();
  58. // Q.clear();
  59. while(scanf("%d",&n)>)
  60. {
  61. printf("%d\n",f[n]-);
  62. }
  63. return ;
  64. }

zoj 3286 Very Simple Counting---统计[1,N]相同因子个数的更多相关文章

  1. Codeforces 11D A Simple Task 统计简单无向图中环的个数(非原创)

    太难了,学不会.看了两天都会背了,但是感觉题目稍微变下就不会了.dp还是摸不到路子. 附ac代码: 1 #include<iostream> 2 #include<cstdio> ...

  2. 17997 Simple Counting 数学

    17997 Simple Counting 时间限制:2000MS  内存限制:65535K提交次数:0 通过次数:0 题型: 编程题   语言: 不限定 Description Ly is craz ...

  3. Javascript 统计复选框选中个数

    var checked = document.getElementsByName("checked_c[]"); var checked_counts = 0; for(var i ...

  4. Linux 统计文件夹下文件个数

    查看统计当前目录下文件的个数,包括子目录里的. ls -lR| grep "^-" | wc -l Linux下查看某个目录下的文件.或文件夹个数用到3个命令:ls列目录.用gre ...

  5. 学c语言做练习之​统计文件中字符的个数

    统计文件中字符的个数(采用命令行参数) #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[] ...

  6. 题目--统计一行文本的单词个数(PTA预习题)

    PTA预习题——统计一行文本的单词个数 7-1 统计一行文本的单词个数 (15 分) 本题目要求编写程序统计一行字符中单词的个数.所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以 ...

  7. Linux上统计文件夹下文件个数以及目录个数

    对于linux终端用户而言,统计文件夹下文件的多少是经常要做的操作,于我而言,我会经常在谷歌搜索一个命令,“如何在linux统计文件夹的个数”,然后点击自己想要的答案,但是有时候不知道统计文件夹命令运 ...

  8. 统计无向图中三角形的个数,复杂度m*sqrt(m).

    统计无向图中三角形的个数,复杂度m*sqrt(m). #include<stdio.h> #include<vector> #include<set> #inclu ...

  9. 给出一个string字符串,统计里面出现的字符个数

    给出一个string字符串,统计里面出现的字符个数 解决方案: 使用algorithm里面的count函数,使用方法是count(begin,end,'c'),其中begin指的是起始地址,end指的 ...

随机推荐

  1. Socket编程概念

    一.网路套接字 在通信过程中,套接字是成对存在的,该套接字内部借助两个缓冲区实现 二.网络字序 1.存储方式 大端法(网络):高位存低位,低位存高位 小端法(本地):高位存高位,低位存低位 2.网络字 ...

  2. A - 开门人和关门人(sort+结构体)

    点击打开链接 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签  到.签离记录,请根据记录找出当天开门和关门的人.  Input 测试输入的第一行给出记录的总天数N ( ...

  3. click 版本升级7.0踩过的坑

    click 版本升级7.0踩过哪些坑? click 版本6.7升级至7.0以上,包名由 click 变更为 Click click 的 Options 和 Parameters 规则变更为如下: Fo ...

  4. 简述在MySQL数据库中MyISAM和InnoDB的区别

    区别主要有以下几点: (1)构成上,MyISAM的表在磁盘中有三个文件组成,分别是表定义文件(.frm).数据文件(.MYD).索引文件(.MYI),而InnoDB的表由表定义文件(.frm).表空间 ...

  5. MyEclipse配置Hibernate具体步骤

    工具: MyEclipse,MySQL 步骤: 1.打开MyEclipse,新建一个Java Project(取名:h1) 2.创建MySQL数据库 3.找到MyEclipse下的MyEclipse ...

  6. 快速滑动时 `cellForRow` 的调用次数

    问题 有一个 1000 个 cell 的 tableView,刚刚进入界面时,contentOffset 为 0.用手快速滑动 tableView,直至最下面一个 cell 显示在屏幕上. 这个过程中 ...

  7. 【LOJ 2542】【PKUWC2018】 随机游走(最值反演 + 树上期望dp)

    哇我太菜啦555555 不妨钦定我们需要访问的点集为$S$,在$S$已知的情况下,我们令$f(x) $表示从$x$走到点集$S$中任意一点的期望步数. 若$x∈S$,则显然$f(x)=0$,否则$f[ ...

  8. Matlab 基础

    命令行(Command Line) 1. help  格式:help  命令 2. cd 配合 Tab 使用 pwd: print current working directory,打印当前工作路径 ...

  9. 腾讯云域名申请+ssl证书申请+springboot配置https

    阿里云域名申请 域名申请比较简单,使用微信注册阿里云账号并登陆,点击产品,选择域名注册 输入你想注册的域名 进入域名购买页面,搜索可用的后缀及价格,越热门的后缀(.com,.cn)越贵一般,并且很可能 ...

  10. Java_单例模式

    主要介绍单例模式的一种写法.注意事项.作用.测试,以Java语言为例,下面代码是目前见过最好的写法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...