Codeforces#304-D - Soldier and Number Game-求因子个数/数学
来源:互联网 发布:魔兽世界7.0 数据库 编辑:程序博客网 时间:2024/06/07 16:17
题意:
给a,b(a>=b)
求a!/b! 的所有因子个数
a范围【1,5000000】,样例1000000组
也就是求 (b+1)(b+2).....a这些数的因子个数之和
显然打表就好了。
打个素数表,过程中顺便把合数的因子个数求一下
最后统计下前缀和就ok
直接输出ans[a]-ans[b]
耗时1559ms
最后面还有一个 1S的代码。
/* 其实打表 可以再优化一点,
看到别人是这样打的
for(i=2;i<5000005;i++) { if(a[i]) { prime[j++]=i; record[i]=1; } else { for(int k=0;k<j;k++) { if(i%prime[k]==0) { record[i]=record[i/prime[k]]+1; break; } } } }
ac代码:
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <deque>#include <set>#include <vector>using namespace std;const int MAX=5000000; bool f[MAX+50];int ans[MAX+50]; int main(){int t;cin>>t;__int64 i,j;f[1]=true;for (i=2;i<=MAX;i++) //1处{if (f[i]==false) //优化{ans[i]=1;for (j=(__int64)i+i;j<=MAX;j=j+i) // 如果1处用1000必须_int64强制转换{ f[j]=true; int tmp=j;while(tmp%i==0){ans[j]++;tmp=tmp/i;}}}} ans[2]=1;for (i=2;i<=MAX;i++){ans[i]+=ans[i-1];} while(t--){int a,b;scanf("%d%d",&a,&b);printf("%d\n",ans[a]-ans[b]);}return 0;}
优化了一步。。。跑了1S
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <iostream>#include <queue>#include <deque>#include <set>#include <vector>using namespace std;const int MAX=5000000; bool f[MAX+50];int ans[MAX+50]; int main(){ int t; cin>>t; __int64 i,j; f[1]=true; for (i=2;i<=MAX;i++) { if (f[i]==false) { ans[i]=1; for (j=(__int64)i+i;j<=MAX;j=j+i) { f[j]=true; if (j%i==0) { ans[j]=ans[j/i]+1;//递推过来 } } } } ans[2]=1; for (i=2;i<=MAX;i++) { ans[i]+=ans[i-1]; } while(t--) { int a,b; scanf("%d%d",&a,&b); printf("%d\n",ans[a]-ans[b]); } return 0; }
0 0
- Codeforces#304-D - Soldier and Number Game-求因子个数/数学
- codeforces-546D-Soldier and Number Game【思维】(求质因子个数)
- CodeForces 546D Soldier and Number Game(求素因子+数学+前缀和)
- Codeforces Round #304 (Div. 2) 546D Soldier and Number Game 质因子个数
- Codeforces546D:Soldier and Number Game(求质因子个数)
- CodeForces 828D Soldier and Number Game(数学)
- CodeForces 546D Soldier and Number Game
- CodeForces-546D Soldier and Number Game
- Codeforces 546D Soldier and Number Game
- CodeForces-546D.Soldier and Number Game
- codeforces 546D. Soldier and Number Game
- CodeForces 546D Soldier and Number Game
- 【codeforces 546D】Soldier and Number Game
- Codeforces Round #304 (Div. 2) D. Soldier and Number Game
- Codeforces Round #304 (Div. 2) D Soldier and Number Game
- Codeforces Round #304 (Div. 2) D. Soldier and Number Game
- Codeforces Round #304 (Div. 2) D - Soldier and Number Game
- Codeforces Round #304 (Div. 2)D. Soldier and Number Game
- DrawerLayout初步了解
- VS中的解决方案设置--项目属性
- Java泛型
- hdoj 2042 不容易系列之二 C++
- js基本属性介绍
- Codeforces#304-D - Soldier and Number Game-求因子个数/数学
- Lambda表达式理解【匿名方法】
- Adapter模式
- 学习资源搜集
- javascript 变量的作用范围
- 动态代理模式
- 黑马程序员——C语言学习笔记06 结构体
- Android设备相关
- ETC1压缩纹理格式详解