这题怎么做最优化

### 题目描述

k的幂数量

### 输入格式

三个整数 l,r,k

### 输出格式

[l,r]之间k的所有幂

### 样例

#### Input 1

1 10 2

#### Output 1

1 2 4 8

#### Input 2

237171123124584251 923523399718980912 7150

#### Output 2

-1

### 数据范围

1<=l<=r<=1018,2<=k<=109

### 样例解释

样本输入1:
1 10 2

样本输出1: 1 2 4 8

样本输入2:
237171123124584251 923523399718980912 7150

样本输出2: -1

一直tle

2 个赞

把循环范围缩到logk l~logk r,直接暴力就行了

2 个赞

???

2 个赞

啥意思

2 个赞
#include<bits/stdc++.h>
using namespace std;
long long l,r,k;
bool f=true;
int main(){
    cin>>l>>r>>k;
    for(long long i=l;i<=r;i++){
    	long long sum=1;
    	while(sum<i){
    		sum*=k;
		}
		if(sum==i){
			f=false;
			cout<<i<<' ';
		}
	}
	if(f){
		cout<<-1;
	}
	return 0;
}
2 个赞

ofen

2 个赞

0分

2 个赞

找出<l并且离l最近的k的幂和<r并且离r最近的k的幂,暴力就行(?

3 个赞

最后一个for咋写

2 个赞

发一下新代码

3 个赞

ooo

2 个赞
#include<bits/stdc++.h>
using namespace std;
const int N=40000005;
int prime[N],cnt;
bool is_prime[N];
void get_prime(){
	for(int i=2;i<=N-5;i++){
		if(is_prime[i] == 0){
			prime[++cnt] = i;
		}
		for(int j=1;prime[j] * i<=N-5;j++){
			is_prime[prime[j]*i] = 1;
			if(i%prime[j] == 0){
				break;
			}
		}
	}
	return;
}
int n,m,t;
int main(){
	cin>>t;
	get_prime();
	while(t--){
		int sum = 0,ans = 0;
		cin>>n;
		for(int i=1,j=1;i<=cnt && j<=cnt;j++){
			if(prime[j] > n){
				break;
			}
			sum+=prime[j];
			while(sum>i){
				sum=sum+prime[i];
				i++;
			}
			if(sum == n){
				ans++;
			}
		}
		cout<<ans<<'\n';
	}
	return 0;
}
//a=b(modc);
//a=b(modc);
2 个赞

那题AC了,你帮我看看最后一道题

2 个赞

这不是另一道题吗

2 个赞

对啊

2 个赞

刚才那提a了

2 个赞

最后一题我不会看啊(

2 个赞

你不第一个a的?

2 个赞