GitHub

幂积序列 1424

题目描述:

设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 } 

 

posted @ 2019-06-20 19:33  繁华似锦觅安宁  阅读(458)  评论(0编辑  收藏  举报