LightOJ 1341 Aladdin and the Flying Carpet
2015-09-30 16:23
375 查看
题意:
a可以写成两个因子相乘的形式,要找出一共有多少中两个不同因子相乘的组合,要求每个因子都大于b思路:
求两个因子的组合只要求出所有因子数然后除以二就行了,求因子数为:sum=(s[0]+1)*(s[1]+1)*(s[2]+1)…… //s[i]为a的一个素因子的个数。
然后暴力求出小于b的所有因子减去就行了,因为当b>sqrt(a)时所有因子都不满足,所以最大只要扫到1e6的大小刚好卡过。
代码:
#define N 1123456 long long n,m; long long flag,sum,ave,ans,res,len,ans1,ans2; bool mark ; int pri ,cnt; void SP() { cnt=0; memset(mark,true,sizeof(mark)); mark[0]=mark[1]=false; for(int i=2;i<N;i++) { if(mark[i]) pri[cnt++]=i; for (int j=0;(j<cnt)&&(i*pri[j]<N);j++) { mark[i*pri[j]]=false; if (i%pri[j]==0) break; } } } int main() { long long i,j,k,kk,t,x,y,z; SP(); scanf("%lld",&k); kk=0; while(k--) { scanf("%lld%lld",&n,&m); sum=0; if(m<sqrt(n)&&n) { sum=1;t=n; for(i=0;i<cnt&&pri[i]<=t;i++) { res=0; while(t%pri[i]==0&&t)t/=pri[i],res++; sum*=(res+1); } if(t>1) sum*=2; sum=sum/2; for(i=1;i<m;i++) if(n%i==0) sum--; } printf("Case %lld: %lld\n",++kk,sum); } return 0; }
相关文章推荐
- c笔记01---扩展名简介,linux 常用命令,vi 设置
- http响应状态码大全
- win server2003 sp2
- jQuery插件之ajaxFileUpload
- Objective-C中的KVC和KVO
- 1611:The Suspects
- CRM-处理懒加载异常
- avahi-daemon service
- Eclipse使用Maven导入Robotium源码后报错
- 配置sonar、jenkins进行持续审查
- ios环境下Axure的安装
- 什么是2MSL
- POJ 算法基础 编程题#1:集合加法
- 认识HDFS分布式文件系统
- hdu 5469 Antonidas(暴力剪枝)
- iOS中容易出错的问题
- qt 子窗口访问父窗口中的成员函数、成员变量
- 状态机模式下的领域模型
- qt viewport window 视口 窗口
- 字符串转换工具