LightOJ-1236
来源:互联网 发布:百度快速排名优化公司 编辑:程序博客网 时间:2024/06/07 07:03
///题意很简单明了 就是求一个数n在[1,n]中lcm(i,i)==n(i<=j)的对数;///思路:咋们可以先打一个素数表用唯一分解定理分解出该数因子的个数然后找规律就可以了;///分析一下i,j;(1)得到i和j的最小公倍数的办法是将i和j进行唯一分解,取相同两个因子的幂的最大值作为该因子的幂,进行相乘就可以得到lcm;///若 n=a1^p1*a2^p2*...*am^pm(a1,a2,...,am均为质数);///我们在取pi个ai的时候,pj可以取p(i,i-1,i-2,,,0,),为pi+1个,相反pj个ai时pi可以取pj+1个,和pi的个数相同,所以总数为2*(pi+1)-1种;///举个例子就是1,2,3的排列数为2*3+1;///所以我们在枚举的时候进行相乘就可以了,最后求得是它的对数只需要向上取整除以2就好了;#include<cstdio>#include<cstring>using namespace std;const int maxn=1e7+7;const int maxn1=1e6+7;///卡你内存;typedef long long LL;int prime[maxn1],flag=0;bool vis[maxn];void getprime(){ memset(prime,0,sizeof(prime)); memset(vis,0,sizeof(vis)); for(int i=2;i<=maxn;i++) { if(!vis[i]) { prime[++flag]=i; for(int j=i*2;j<=maxn;j+=i) vis[j]=1; } }}int main (){ getprime(); int t; scanf("%d",&t); LL data; for(int cas=1;cas<=t;cas++) { scanf("%lld",&data); LL ans=1; for(int j=1;j<=flag&&prime[j]<=data;j++) { LL sum=0; if(data%prime[j]==0) { while(data%prime[j]==0)///唯一分解;计算因子的个数 { data/=prime[j]; sum++; } } ans*=(2*sum+1); } if(data>1) ans*=3;///因为打的素数表有限,所以在最后的时候特判一下就好了; printf("Case %d: %lld\n",cas,(ans+1)/2); } return 0;}
阅读全文
0 0
- LightOJ 1236
- LightOJ-1236
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- [LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- xml的四种解析方式
- LightOJ-1245
- [Impala--使用注意]--调整对应的参数(cdh-5.8.x版本)
- 对ArrayList集合中的元素进行排序
- 求大神帮我解决一下我的DEV编译器的问题!!
- LightOJ-1236
- MySQL学习(一)【MySQL数据库基础】
- python中面向对象
- 如何使用Spring Boot从0到1搭建一个Java后台(二)
- 神经学家的探寻:这就是机器如何拥有意识的方法 | 精选
- MFC(对话框鼠标右键弹出菜单)
- 李开复论述中国AI崛起:中国成世界第一有六大原因 | 言论
- 寒武纪发布3款AI处理器:3年要占领10亿终端和30%的市场 | 新品
- 当创造力不再是人类独有,下一位莫扎特会是机器人吗 | 前沿