午夜的留言附属站 » 日志 » 3n+1
3n+1
任腾 发表于 2007-08-14 01:41:52
1. #include <cstdio>
2. #include <algorithm>
3. #include <string>
4. #define maxn 1000001
5. using namespace std;
6. int d[maxn]={0},a,b,a0,b0;
7.
8. int calc(long long x){
9. int ret=0;
10. while (x!=1&&(x>=maxn||!d[x])){
11. ++ret;
12. if (x&1) x=x+x+x+1;
13. else x>>=1;
14. }
15. ret+=d[x];
16. return ret;
17. }
18.
19. int main(){
20. for (int i=1;i<maxn;i++) if (!d[i])
21. d[i]=calc(i);
22.
23. while (scanf("%d%d",&a0,&b0)==2){
24. a=min(a0,b0);
25. b=max(a0,b0);
26. int ans=0;
27. for (int i=a;i<=b;i++)
28. ans>?=d[i];
29. printf("%d %d %d\n",a0,b0,ans+1);
30. }
31. return 0;
32. }
2. #include <algorithm>
3. #include <string>
4. #define maxn 1000001
5. using namespace std;
6. int d[maxn]={0},a,b,a0,b0;
7.
8. int calc(long long x){
9. int ret=0;
10. while (x!=1&&(x>=maxn||!d[x])){
11. ++ret;
12. if (x&1) x=x+x+x+1;
13. else x>>=1;
14. }
15. ret+=d[x];
16. return ret;
17. }
18.
19. int main(){
20. for (int i=1;i<maxn;i++) if (!d[i])
21. d[i]=calc(i);
22.
23. while (scanf("%d%d",&a0,&b0)==2){
24. a=min(a0,b0);
25. b=max(a0,b0);
26. int ans=0;
27. for (int i=a;i<=b;i++)
28. ans>?=d[i];
29. printf("%d %d %d\n",a0,b0,ans+1);
30. }
31. return 0;
32. }
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾
