zoj 3286 Very Simple Counting---统计[1,N]相同因子个数
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
- 4
- 5
Sample Output
- 0
- 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那一题是一样的。
贴一下超时代码吧,留个纪念。
- //超时代码
- #include<stdio.h>
- #include<stdlib.h>
- int f[];
- int Num_Euler(int n)
- {
- int num=,k,i;
- for(i=;i*i<=n;i++)
- if(n%i==)
- {
- k=;
- while(n%i==)
- {
- k++;
- n=n/i;
- }
- num=num*k;
- }
- if(n!=)
- num=num*;
- return num;
- }
- void make_ini()
- {
- int i;
- for(i=;i<=;i++)
- f[i]=Num_Euler(i);
- }
- int main()
- {
- int n,i,num;
- make_ini();
- while(scanf("%d",&n)>)
- {
- num=;
- for(i=;i<n;i++)
- if(f[i]==f[n])
- num++;
- printf("%d\n",num);
- }
- return ;
- }
后来想用筛选法来筛一次,然后求值。第一次写的时候,也错了。
- void make_NumEuler()
- {
- int i,j,k;
- for(i=;i<=;i++)
- opl[i]=;
- for(i=;i<=len;i++)
- for(j=prime[i],k=;j<=;j=j+prime[i],k++)
- opl[j]=opl[j]*k;
- }
思路是有的,就是没有写出来,(⊙o⊙)…
最后的代码:
- #include<iostream>
- #include<map>
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- using namespace std;
- bool s[];
- int num[];
- int ans[];//个数
- int f[];
- map<int,int>Q;
- void make_ini()
- {
- int i,j,k;
- for(i=;i<=;i++)
- {
- num[i]=i;
- ans[i]=;
- f[i]=;
- }
- for(i=;i<=;i++)
- if(s[i]==false)//是素数
- {
- for(j=i;j<=;j=j+i)//枚举每个素数的倍数
- {
- // if(j%i==0) //这个肯定成立,不需要
- {
- k=;
- while(num[j]%i==)
- {
- num[j]=num[j]/i;
- k++;
- }
- ans[j]=ans[j]*k;
- }
- s[j]=true;
- }
- }
- for(i=;i<=;i++)
- {
- k=ans[i];
- if(Q.find(k)==Q.end())
- {
- Q[k]=;
- }
- else Q[k]++;
- f[i]=Q[k];
- }
- }
- int main()
- {
- int n;
- make_ini();
- // Q.clear();
- while(scanf("%d",&n)>)
- {
- printf("%d\n",f[n]-);
- }
- return ;
- }
zoj 3286 Very Simple Counting---统计[1,N]相同因子个数的更多相关文章
- Codeforces 11D A Simple Task 统计简单无向图中环的个数(非原创)
太难了,学不会.看了两天都会背了,但是感觉题目稍微变下就不会了.dp还是摸不到路子. 附ac代码: 1 #include<iostream> 2 #include<cstdio> ...
- 17997 Simple Counting 数学
17997 Simple Counting 时间限制:2000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: 不限定 Description Ly is craz ...
- Javascript 统计复选框选中个数
var checked = document.getElementsByName("checked_c[]"); var checked_counts = 0; for(var i ...
- Linux 统计文件夹下文件个数
查看统计当前目录下文件的个数,包括子目录里的. ls -lR| grep "^-" | wc -l Linux下查看某个目录下的文件.或文件夹个数用到3个命令:ls列目录.用gre ...
- 学c语言做练习之统计文件中字符的个数
统计文件中字符的个数(采用命令行参数) #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[] ...
- 题目--统计一行文本的单词个数(PTA预习题)
PTA预习题——统计一行文本的单词个数 7-1 统计一行文本的单词个数 (15 分) 本题目要求编写程序统计一行字符中单词的个数.所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以 ...
- Linux上统计文件夹下文件个数以及目录个数
对于linux终端用户而言,统计文件夹下文件的多少是经常要做的操作,于我而言,我会经常在谷歌搜索一个命令,“如何在linux统计文件夹的个数”,然后点击自己想要的答案,但是有时候不知道统计文件夹命令运 ...
- 统计无向图中三角形的个数,复杂度m*sqrt(m).
统计无向图中三角形的个数,复杂度m*sqrt(m). #include<stdio.h> #include<vector> #include<set> #inclu ...
- 给出一个string字符串,统计里面出现的字符个数
给出一个string字符串,统计里面出现的字符个数 解决方案: 使用algorithm里面的count函数,使用方法是count(begin,end,'c'),其中begin指的是起始地址,end指的 ...
随机推荐
- Socket编程概念
一.网路套接字 在通信过程中,套接字是成对存在的,该套接字内部借助两个缓冲区实现 二.网络字序 1.存储方式 大端法(网络):高位存低位,低位存高位 小端法(本地):高位存高位,低位存低位 2.网络字 ...
- A - 开门人和关门人(sort+结构体)
点击打开链接 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input 测试输入的第一行给出记录的总天数N ( ...
- click 版本升级7.0踩过的坑
click 版本升级7.0踩过哪些坑? click 版本6.7升级至7.0以上,包名由 click 变更为 Click click 的 Options 和 Parameters 规则变更为如下: Fo ...
- 简述在MySQL数据库中MyISAM和InnoDB的区别
区别主要有以下几点: (1)构成上,MyISAM的表在磁盘中有三个文件组成,分别是表定义文件(.frm).数据文件(.MYD).索引文件(.MYI),而InnoDB的表由表定义文件(.frm).表空间 ...
- MyEclipse配置Hibernate具体步骤
工具: MyEclipse,MySQL 步骤: 1.打开MyEclipse,新建一个Java Project(取名:h1) 2.创建MySQL数据库 3.找到MyEclipse下的MyEclipse ...
- 快速滑动时 `cellForRow` 的调用次数
问题 有一个 1000 个 cell 的 tableView,刚刚进入界面时,contentOffset 为 0.用手快速滑动 tableView,直至最下面一个 cell 显示在屏幕上. 这个过程中 ...
- 【LOJ 2542】【PKUWC2018】 随机游走(最值反演 + 树上期望dp)
哇我太菜啦555555 不妨钦定我们需要访问的点集为$S$,在$S$已知的情况下,我们令$f(x) $表示从$x$走到点集$S$中任意一点的期望步数. 若$x∈S$,则显然$f(x)=0$,否则$f[ ...
- Matlab 基础
命令行(Command Line) 1. help 格式:help 命令 2. cd 配合 Tab 使用 pwd: print current working directory,打印当前工作路径 ...
- 腾讯云域名申请+ssl证书申请+springboot配置https
阿里云域名申请 域名申请比较简单,使用微信注册阿里云账号并登陆,点击产品,选择域名注册 输入你想注册的域名 进入域名购买页面,搜索可用的后缀及价格,越热门的后缀(.com,.cn)越贵一般,并且很可能 ...
- Java_单例模式
主要介绍单例模式的一种写法.注意事项.作用.测试,以Java语言为例,下面代码是目前见过最好的写法: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...