NOJ 212题K尾相等数
来源:互联网 发布:mysql 最小值 编辑:程序博客网 时间:2024/05/01 13:32
题目链接~~>
这题属于简单题,本来不想写进博客,但看了别人的优代码,真没想到那种方法,比较好。我用的快速幂然后开始遍历,时间可想而知。。。
代码(本人):
#include<stdio.h>int pow(int b,int m)//快速幂{ int ans=1; while(b) { if(b%2) { ans=(m*ans)%1000; } b/=2; m=(m*m)%1000; } return ans;}int pss(int b,int n){ int ans=1; while(b) { if(b%2) { ans=n*ans; } b/=2; n=n*n; } return ans;}int main(){ int T; long long m; int i,j,k,x,y,q; scanf("%d",&T); while(T--) { scanf("%lld",&m); if(m<1000)//让起点大于1000 { q=m; for(i=1;i<=35;i++) if(pss(i,q)>=1000) break; } else { q=m%1000; i=1; } for(j=i;j<1000;j++) { int f=0; for(k=i;k<j;k++) { x=pow(j,q); y=pow(k,q); if(x==y) { f=1; break; } } if(f==1) break; } printf("%d\n",j+k); } return 0;}
代码(优):
#include<stdio.h>int main(){ long int n,k,i; scanf("%d",&n);while(n--){scanf("%d",&k); long int a[1000]={0},t,flag=0; if(k>=1000){k%=1000; a[k]++; flag=1;} for(t=k,i=2;;i++){ k=t*k; if(flag==1||k>=1000){k%=1000;a[k]+=i;if(a[k]>i)//如果成立说明已经存过数break;}} printf("%d\n",a[k]); } }
- NOJ 212题K尾相等数
- k尾相等数
- k尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- K尾相等数
- k尾相等数
- K尾相等数
- NYOJ 212 K尾相等数
- NYOJ 212 K尾相等数
- nyoj-212-k尾相等数
- nyoj-212-K尾相等数
- sdibt K尾相等数
- NYOJ - K尾相等数
- C++一维数组和指针的关系总结
- jQuery Ajax全解析
- 【Oracle】-【体系结构-LGWR】-LGWR的一些理解
- 百度自定义地图控件
- Struts2中field级别错误导致action无法使用的问题
- NOJ 212题K尾相等数
- TortoiseSVN 打开出现“系统找不到指定的路径”
- 渗透课程笔记
- Win 7重装小记
- java中提高时间性能的一些措施
- [小说]魔王冢(13)吕四娘
- hdu3460(字典树)
- gdb调试汇编
- Linux怎样查看所有用户以及用户(组)的添加 删除