CodeForces 546D(求质因数的个数)
来源:互联网 发布:小说有声阅读软件 编辑:程序博客网 时间:2024/06/10 02:45
CodeForces 546D(求质因数的个数)
- 题目链接
- 题目大意:求(a!/b!)的所有质因数个数的总和
- 解题思路:刚开始的时候我是把所有的质数求出来存在一个数组里,对于每一个(a!/b!),求从(b+1)到a的每一个数的质因数的个数,然后再求和,这样在test 4的时候TLE了,然后我就去看了网上的题解,发现是把从1到5000000所有数的质因数全部都求出来,然后求一下前缀和,只要isprime[a]-isprime[b](isprime[i]就是i的质因数的个数)就是答案了。注意这里如果不用前缀和,而是
scanf("%d%d",&a,&b); int c=a-b; while(c--) { num+=isprime[a--]; }
直接这样求和的话也会超时。
- AC代码
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int isprime[5000001];int main(){ memset(isprime,0,sizeof(isprime)); for(int i=2;i<=5000000;i++) { if(isprime[i]==0) { for(int j=i;j<=5000000;j+=i)//这里等号不能省,注意数据范围 { int q=j; while(q%i==0)//这三行这里不能写成isprime[j]++,因为j可能含有好几个i,如果这里不求出j中i的个数,后面也加不上 { isprime[j]++; q=q/i; } } } } for(int i=2;i<=5000000;i++) isprime[i+1]+=isprime[i]; int t; scanf("%d",&t); while(t--) { int a,b,num=0; scanf("%d%d",&a,&b); printf("%d\n",isprime[a]-isprime[b]); } return 0;}
阅读全文
0 0
- CodeForces 546D(求质因数的个数)
- CodeForces 546D (求素因子个数)
- codeforces 546D Soldier and Traveling(求一个数的质因子个数)
- 求一个数阶乘的质因数的个数
- 清华大学 质因数的个数
- 质因数的个数
- 质因数的个数
- codeforces-546D-Soldier and Number Game【思维】(求质因子个数)
- 分解质因数和求因数个数
- 求质因数的和
- 求正整数的质因数
- Codeforces 490D. Chocolate(分解质因数求解)
- 题目54:质因数的个数
- 题目1137: 质因数的个数
- 题目1207:质因数的个数
- 题目1207:质因数的个数
- 题目1207:质因数的个数
- 题目1207:质因数的个数
- java如何查看jar编译的jdk版本
- H264码率设置
- 《失控》之七--控制的兴起
- 【MVC】错误页面设置和错误信息记录
- Java类加载机制解析
- CodeForces 546D(求质因数的个数)
- PHP入门(第二弹:下载WAMPServer集成开发环境)
- Android Fragment懒加载简单实现
- 《失控》之八--封闭系统
- go sync的并发同步简单用法
- 关于laravel中key的错误cipher and / or key length are invalid
- Restful API 安全
- datastage解决cannot get exclusive access to a log for a job的方发
- 《失控》之九--《冒出》的生态圈