杭电 “Prime Bases ”解题报告
来源:互联网 发布:最新省市区数据库 编辑:程序博客网 时间:2024/05/18 01:54
Prime Bases
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 26 Accepted Submission(s) : 7
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Given any integer base b >= 2, it is well known that every positive integer n can be uniquely represented in base b. That is, we can write
n = a0 + a1*b + a2*b*b + a3*b*b*b + ...
where the coefficients a0, a1, a2, a3, ... are between 0 and b-1 (inclusive).
What is less well known is that if p0, p1, p2, ... are the first primes (starting from 2, 3, 5, ...), every positive integer n can be represented uniquely in the "mixed" bases as:
n = a0 + a1*p0 + a2*p0*p1 + a3*p0*p1*p2 + ...
where each coefficient ai is between 0 and pi-1 (inclusive). Notice that, for example, a3 is between 0 and p3-1, even though p3 may not be needed explicitly to represent the integer n.
Given a positive integer n, you are asked to write n in the representation above. Do not use more primes than it is needed to represent n, and omit all terms in which the coefficient is 0.
n = a0 + a1*b + a2*b*b + a3*b*b*b + ...
where the coefficients a0, a1, a2, a3, ... are between 0 and b-1 (inclusive).
What is less well known is that if p0, p1, p2, ... are the first primes (starting from 2, 3, 5, ...), every positive integer n can be represented uniquely in the "mixed" bases as:
n = a0 + a1*p0 + a2*p0*p1 + a3*p0*p1*p2 + ...
where each coefficient ai is between 0 and pi-1 (inclusive). Notice that, for example, a3 is between 0 and p3-1, even though p3 may not be needed explicitly to represent the integer n.
Given a positive integer n, you are asked to write n in the representation above. Do not use more primes than it is needed to represent n, and omit all terms in which the coefficient is 0.
Input
Each line of input consists of a single positive 32-bit signed integer. The end of input is indicated by a line containing the integer 0.
Output
For each integer, print the integer, followed by a space, an equal sign, and a space, followed by the mixed base representation of the integer in the format shown below. The terms should be separated by a space, a plus sign, and a space. The output for each integer should appear on its own line.
Sample Input
1234561234560
Sample Output
123 = 1 + 1*2 + 4*2*3*5456 = 1*2*3 + 1*2*3*5 + 2*2*3*5*7123456 = 1*2*3 + 6*2*3*5 + 4*2*3*5*7 + 1*2*3*5*7*11 + 4*2*3*5*7*11*13
Source
2008 Rocky Mountain Regional
解题思路:
解题思路:
本题是简单的数论题,数据处理量也不大,不用担心超时的问题,用一个数组prime[]将29及以下的素数全存储起来,然后将素数累乘的积及最大系数+1(这里还没减去,在后面处理)放入一个二维数组sum中。
处理输入数据时,定义一个二维数组a,存放是否使用对应sum中该位置的值是否使用,未使用则继续,使用则减去该存放的值,在a【1】中第一个位置存放1,第二个位置存放系数。循环,在控制输出,就可以了。
本来素数到23就可以了,但是为什么要写到29,思考一下。可能不一定用到,但是我没算,细心的朋友算一下。
代码如下:#include <iostream>using namespace std;int main(){int n,i,j;//数据预处理int prime[]={2,3,5,7,11,13,17,19,23,29};__int64 sum[10][2],tempcount=1,tempnum=1;for(i=0,j=0;i<10;i++){sum[i][0]=tempcount;sum[i][1]=tempnum;tempnum=prime[j]-1;tempcount*=prime[j++];}//数据处理while(cin>>n){int out=n;if(n==0)break;int a[10][2]={0};i=9;while(n!=0){if(n>=sum[i][0]){for(j=prime[i+1]-1;j>0;j--){tempcount=j*sum[i][0];if(tempcount<=n){a[i][0]=1;a[i][1]=j;n-=tempcount;break;}}}else{a[i][0]=0;a[i][1]=0;}i--;}//控制输出cout<<out<<" = ";int outcount=0;for(i=0;i<10;i++){if(a[i][0]==1){if(i==0){cout<<"1";outcount++;}else{if(outcount!=0)cout<<" + ";cout<<a[i][1]<<"*";for(j=0;j<i;j++){cout<<prime[j];if(j!=i-1)cout<<"*";}outcount++;}}}cout<<endl;}return 0;}
- 杭电 “Prime Bases ”解题报告
- 杭电OJ题 1016 Prime Ring Problem解题报告
- Prime Bases
- Prime Bases
- 杭电1008解题报告
- 杭电1014解题报告
- 杭电1160解题报告
- 杭电1176解题报告
- 杭电2059解题报告
- 杭电HDOJ1024 解题报告
- 杭电2028解题报告
- 杭电3342解题报告
- 杭电Robberies解题报告
- 杭电1061 解题报告
- 杭电ACM1800解题报告
- 杭电1045解题报告
- 杭电1050解题报告
- 杭电2037解题报告
- 部署虚拟化:达成目标or不符期许?
- .net 2.0中新增的nullable类型_asp.net使用技巧
- IEEE以太网新标准可缓解数据中心之困
- 搭载Mango系统 WP7新机HTC Mazaa视频曝光
- 单例模式照成的java.lang.StackOverflowError
- 杭电 “Prime Bases ”解题报告
- jstl标签库用法
- Android对话框
- MyBatis框架的使用
- 基于ARM的嵌入式的多功能串口通信
- TFS 2010 备份
- Centos5.5 下安装ffmpeg-php笔记
- 转:Linux MMC/SD/SDIO体系结构
- java中创建线程的两种方法及其区别