整除个数
来源:互联网 发布:淘宝香云纱 编辑:程序博客网 时间:2024/05/19 23:24
整除个数
时间限制:3000 ms | 内存限制:65535 KB
难度:1
- 描述
- 1、2、3… …n这n(0<n<=1000000000)个数中有多少个数可以被正整数b整除。
- 输入
- 输入包含多组数据
每组数据占一行,每行给出两个正整数n、b。 - 输出
- 输出每组数据相应的结果。
- 样例输入
2 15 310 4
- 样例输出
212
- 来源
- 自编
- 上传者
mix_math
问题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=399
非正确代码1:
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <queue> #include <stack> #include <map> #include <string> #include <algorithm> #include <iomanip>#define MAX 1000000000using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */bool mark[MAX];int main(int argc, char** argv) {/*freopen("file/input.txt","r",stdin);freopen("file/output.txt","w",stdout);*/int n,b;while(scanf("%d%d",&n,&b)!=EOF){memset(mark,false,sizeof(mark));int ans=0;for(int i=1;i<=n;i++){if(mark[i] == true){continue;}if(i % b == 0){ //找到一个可以整除的i,则将之后i的倍数的数全部标记为可以整数,//并累加的结果中 mark[i]=true;ans++;for(int j=2*i;j>0 && j<=n;j+=i){mark[j]=true;ans++;}}}printf("%d\n",ans);}return 0;}
错误:MemoryLimitExceeded在标记时候申请了很大一块空间进行标记数是否被检查过。
改进代码:#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <queue> #include <stack> #include <map> #include <string> #include <algorithm> #include <iomanip>#define MAX 1000000000using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) {/*freopen("file/input.txt","r",stdin);freopen("file/output.txt","w",stdout);*/int n,b;while(scanf("%d%d",&n,&b)!=EOF){int ans=0;for(int i=b;i<=n;i+=b){ans++;}printf("%d\n",ans);//printf("%d\n",n/b);}return 0;}
错误:TimeLimitExceeded改进第一个超出内存错误时发现在遍历时,可以整除的一定是b的倍数。因 此直接对n以内的b的倍数进行统计即可。
但是却超时了。 忽然发现其实直接n/b就是n内可以整除b的个数。为什么呢?希望知道的能解惑一下,非常感谢!q q 1 2 2 51 5 4 2 9 6
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <queue> #include <stack> #include <map> #include <string> #include <algorithm> #include <iomanip>#define MAX 1000000000using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) {/*freopen("file/input.txt","r",stdin);freopen("file/output.txt","w",stdout);*/int n,b;while(scanf("%d%d",&n,&b)!=EOF){//int ans=0;//for(int i=b;i<=n;i+=b){//ans++;//}//printf("%d\n",ans);printf("%d\n",n/b);}return 0;}
阅读全文
0 0
- 整除个数
- 整除个数
- 整除个数
- 整除个数
- 整除个数
- 整除个数
- 整除个数
- 整除个数
- 南阳理工:整除个数
- NYOJ 399 整除个数
- nyoj-399-整除个数
- 399 整除个数
- 399 整除个数
- NYOJ-整除个数(水题)
- NYOJ-整除个数
- nyoj554整除个数
- NYOJ 399 整除个数
- nyoj 399 整除个数
- event的使用例子
- 如何往Github上提交项目(二)—SSH方式
- bzoj 1016: [JSOI2008]最小生成树计数
- C#窗口控件大小随窗口大小而改变
- PAT-A-1017. Queueing at Bank (25)
- 整除个数
- 单例模式类型(一)
- 标签入门
- 方法(打印m行n列)
- 在IBM bluemix公有云上部署容器
- 微信小程序快速开发:视频指导版
- static 使用
- Go RPC
- Java生态研究