using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;publicclassPowerSumDig{publicstaticlongPowerSumDigTerm(int n){long nextsq =16;long nextbs =4;
SortedSet<Pair> vals =newSortedSet<Pair>(){newPair(9,3)};while(true){Pair mp = vals.First();long newPower = mp.Power * mp.Bs;while(newPower > nextsq){if(nextbs >100)break;Pair np =newPair( nextsq, nextbs++);if(Accepted(np))
n--;if(n ==0)return np.Power;
vals.Add(np);
nextsq = nextbs * nextbs;}
vals.Remove(mp);
mp.Power = newPower;
mp.NextPower = mp.Power * mp.Bs;if(Accepted(mp))
n--;if(n ==0)return mp.Power;
vals.Add(mp);}}publicclassPair:IComparable<Pair>{publicoverridestringToString(){return String.Format("Power: {0}, Base: {1}", Power, Bs);}publicPair(long power,long bs){
Power = power;
Bs = bs;
NextPower = power * bs;}publiclong Power {get;set;}publiclong Bs {get;set;}publiclong NextPower {get;set;}publicintCompareTo(Pair other){return NextPower.CompareTo(other.NextPower)==0? Bs.CompareTo(other.Bs): NextPower.CompareTo(other.NextPower);}}publicstaticboolAccepted(Pair p){long power = p.Power;long bs = p.Bs;long sum =0;while(power>0){
sum += power %10;
power /=10;if(sum > bs)returnfalse;}return sum == bs;}}
答案3:
using System.Collections.Generic;using System.Linq;publicclassPowerSumDig{publicstaticlongPowerSumDigTerm(int n){var values =newList<long>();for(int i =2; i <100; i++){longvalue= i;for(int j =2; j <10; j++){value*= i;if(SumDigits(value)== i){
values.Add(value);}}}return values.OrderBy(c => c).ElementAt(n -1);}publicstaticlongSumDigits(long n){long sum =0;while(n >0){
sum += n %10;
n /=10;}return sum;}}
using System;using System.Collections.Generic;publicclassPowerSumDig{publicstaticlongPowerSumDigTerm(int n){
List<long> arr =newList<long>();for(int i=2; i<10;++i){for(int j=2; j<100;++j){double pow = Math.Pow(j,i);if(Sum(Convert.ToInt64(pow))== j)
arr.Add(Convert.ToInt64(pow));}}
arr.Sort();return arr[n-1];}publicstaticlongSum(long num)=> num !=0? num %10+Sum(num /10):0;}
答案6:
using System.Collections.Generic;publicclassPowerSumDig{publicstaticlongPowerSumDigTerm(int n){// sometimes, it's seems legit to use dictionaries :-)// https://oeis.org/A023106 + https://oeis.org/A023106/b023106.txtreturn OESIS_A023106[n +9];}publicstatic Dictionary<int,long> OESIS_A023106 =newDictionary<int,long>{[0]=0,[1]=1,[2]=2,[3]=3,[4]=4,[5]=5,[6]=6,[7]=7,[8]=8,[9]=9,[10]=81,[11]=512,[12]=2401,[13]=4913,[14]=5832,[15]=17576,[16]=19683,[17]=234256,[18]=390625,[19]=614656,[20]=1679616,[21]=17210368,[22]=34012224,[23]=52521875,[24]=60466176,[25]=205962976,[26]=612220032,[27]=8303765625,[28]=10460353203,[29]=24794911296,[30]=27512614111,[31]=52523350144,[32]=68719476736,[33]=271818611107,[34]=1174711139837,[35]=2207984167552,[36]=6722988818432,[37]=20047612231936,[38]=72301961339136,[39]=248155780267521,[40]=3904305912313344,[41]=45848500718449031,[42]=81920000000000000,[43]=150094635296999121};}
答案7:
using System;using System.Collections.Generic;publicclassPowerSumDig{publicstaticlongPowerSumDigTerm(int n){
List<long> powers =newList<long>();int count =0;for(int i =3; i <500; i++){// range of base numbersfor(int k =2; k <50; k++){// range of possible powerslong sum =0;long pow =(long)Math.Pow(i, k);long powCopy = pow;while(powCopy >0){
sum += powCopy %10;
powCopy = powCopy /10;}if(sum == i){
powers.Add(pow);
count++;}}}
powers.Sort();return powers[n-1];}}
答案8:
using System;using System.Collections.Generic;using System.Linq;publicclassPowerSumDig{publicstaticlongPowerSumDigTerm(int n){
List<long> matches =newList<long>();while(matches.Count < n){for(long i =2; i <100; i++){for(long j =2; j <10; j++){long c = Convert.ToInt64(Math.Pow(i, j));var sum = c.ToString().Sum(a => Convert.ToInt32(a.ToString()));if(Math.Pow(sum, j)== c){
matches.Add(c);}}}}var outputList = matches.OrderBy(x => x).ToList();return outputList[n -1];}}
答案9:
using System;using System.Collections.Generic;publicclassPowerSumDig{publicstaticlongPowerSumDigTerm(int n){
List<long> arr =newList<long>();for(int num =2; num <500; num++){longvalue= num;for(int pow =2; pow <=50; pow++){value*= num;int sum =GetSum(value);if(sum <= num &&value>0)if(sum == num){
arr.Add(value);}if(arr.Count >50)break;}if(arr.Count >50)break;}
arr.Sort();return arr[n -1];}publicstaticintGetSum(long num){int sum =0;foreach(char ch in num.ToString()){
sum += Convert.ToInt32(char.GetNumericValue(ch));}return sum;}}
答案10:
using System;using System.Collections.Generic;using System.Linq;using System.Numerics;publicclassPowerSumDig{publicstaticintDigSum(BigInteger n){int sum =0;while(n !=0){
sum +=(int)(n %10);
n /=10;}return sum;}publicstaticlongPowerSumDigTerm(int n){var list =newList<long>();for(int b =2; b <=200; b++){for(int e =2; e <=50; e++){var result = BigInteger.Pow(b, e);if(DigSum(result)== b && result <=long.MaxValue)
list.Add((long) result);}}return list.OrderBy(x => x).ElementAt(n -1);}}
数字是其数字之和的幂【难度:3级】:答案1:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;public class PowerSumDig { public static long PowerSum...