设x,y为非负整数,试计算集合M={(2^x)*(3^y),x>=0,y>=0}的元素不大于指定整数n的个数,并求这些元素从小到大排序的第m项。
多组输入,每组一行,输入n和m,n和m之间用一个空格分开
对于每组输入,输出数列中不大于n的项数以及第m项的值,这两个数占两行。
10000000 100
190
93312
思想:可以从另一个角度解决问题,将幂积变为整除角度来解决问题
1 #include<iostream> 2 using namespace std; 3 int main(){ 4 int n,m; 5 while(cin>>n>>m){ 6 int a[10000]; 7 int i,j,p,ns=3; 8 a[1]=1; 9 a[2]=2; 10 for(i=3;i<=n;i++){ 11 p=i; 12 while(p%2==0){//将2和3的因子去除 13 p=p/2; 14 } 15 while(p%3==0){ 16 p=p/3; 17 } 18 if(p==1){ 19 a[ns]=i; 20 ns++; 21 } 22 } 23 ns=ns-1; 24 cout<<ns<<endl; 25 cout<<a[m]<<endl; 26 } 27 }
原文:https://www.cnblogs.com/zq-dmhy/p/11060868.html