■問題
本家参照.
■解法
chokudaiさんのニコ生を追従して解いた.指数は2以上なので,amまたはbkの候補を先に作っておく.あとは2重ループで条件を満たす数のフラグを立てるだけ.
- import java.util.*;
- public class SumsOfPerfectPowers{
- public int howMany(int lowerBound, int upperBound){
- boolean[] dp=new boolean[upperBound+1];
- TreeSet<Integer> set=new TreeSet<Integer>();
- set.add(0);
- set.add(1);
- for(int a=2;a*a<=upperBound;a++){
- for(long r=a*a;r<=upperBound;r*=a){
- set.add((int)r);
- }
- }
- for(int a:set){
- for(int b:set){
- if(a+b<=upperBound){
- dp[a+b]=true;
- }
- }
- }
- int ret=0;
- for(int i=lowerBound;i<=upperBound;i++){
- if(dp[i]){
- ret++;
- }
- }
- return ret;
- }
- }
0 件のコメント:
コメントを投稿