BOJ 319 3230391's easy problem
来源:互联网 发布:python中文编码问题 编辑:程序博客网 时间:2024/05/01 12:43
考察素因子分解+打表,比如6=2*3,即2的x次方*3的y次方,x可以取0或1,3可以取0或1,故2*2=4种因子
/* for(int i=2;i<num;i++) {for(int j=prim[i-1];1;j+=2){int k,l;for(k=0,l=sqrt(j);prim[k]<=l&&j%prim[k];k++);if(prim[k]>l){prim[i]=j;break;}}} */#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<ctime>#define N 1000005int n;int prim[1000005];int a[1000005];int f[1000005];int s[1000005];int main(){ memset(f,0,sizeof(f)); int l=(int)sqrt(N*1.0); for(int i=2;i<=l;i++) if(a[i]==0) for(int j=i;i*j<=N;j++) a[i*j]=1; int num=0; for(int j=2;j<=N;j++) if(a[j]==0) prim[num++]=j; //对f进行打表 f[1]=1;for(int i=2;i<=N;i++){int tmp=i,mul=1;int len=(int)sqrt(i*1.0);//len如果不独立出来会超时,这一点要记清楚 for(int j=0;prim[j]<=len;j++){ //因为i的素因子最多为sqrt(i)(除了本身为素数的情况),所以加上prim[j]<=len这一句int cnt; if(tmp%prim[j]==0){cnt=1; while(tmp%prim[j]==0){ cnt++; tmp/=prim[j];}mul*=cnt;}}if(tmp!=1) mul*=2;f[i]=mul;}s[0]=0;for(int i=1;i<=N;i++) s[i]=s[i-1]+f[i]; while(scanf("%d",&n)==1&&n) printf("%d\n",s[n]); return 0;}
- BOJ 319 3230391's easy problem
- Fermat's Easy Problem
- easy problem
- boj problem 1325 一次ac~~哈哈 第一次~~
- boj-1002-A-B Problem 大数加减法
- o.boj 1417 Cloudiris's Flower
- 【数论-异或】nyoj-备用 2345: A problem that's so easy
- SetType,a easy problem
- An Easy Problem
- 2055 An easy problem
- An Easy Problem!
- An Easy Problem!
- Easy Problem(cdOJ1644)
- 【模拟】Another Easy Problem
- FZU_1753 Another Easy Problem
- fzu1753 Another Easy Problem
- poj2826 An Easy Problem?!
- A problem is easy
- C#用什么方法可以减少或不使用switch
- PKU ACM/ICPC竞赛队最近八年比赛成绩
- Android实现电话状态监控
- C++异常机制的实现方式和开销分析
- iOS-色彩UIColor
- BOJ 319 3230391's easy problem
- android之layout_weight详解
- C#Winform获取屏幕大小
- 栈实现中缀表达式转为后缀表达式
- JNI学习系列(一)
- 利用Spring的AbstractRoutingDataSource解决多数据源的问题
- 关于vs未处理的异常: 0xC00000FD: Stack overflow
- java之插入排序
- Remove Duplicates from Sorted List II