版权声明:如果转载,请注明出处。 https://blog.csdn.net/S_999999/article/details/88363032
标题:连续奇数和
小明看到一本书上写着:任何数字的立方都可以表示为连续奇数的和。
比如:
2^3 = 8 = 3 + 5
3^3 = 27 = 7 + 9 + 11
4^3 = 64 = 1 + 3 + ... + 15
虽然他没有想出怎么证明,但他想通过计算机进行验证。
请你帮助小明写出 111 的立方之连续奇数和表示法的起始数字。如果有多个表示方案,选择起始数字小的方案。
请严格按照要求,通过浏览器提交答案。
注意:只提交一个整数,不要写其它附加内容,比如:说明性的文字。
// 方法一 : 利用性质 前n个奇数的和 为 n^2;
#include<iostream>
using namespace std;
int main(void){
long long int tmp = 111;
long long int ans = tmp*tmp*tmp;
for( long long int i =1;i<tmp*tmp ;i++)
for( long long int j = 1;j<=tmp*tmp ;j++)
if( j*j - i*i == ans ){
printf("%lld \n",i*2+1);
break;
}
return 0;
}
// 方法 二 : 枚举
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
long long int prime[111*111*111];
bool isprime( long long int n ){
if( n & 1 )
return true;
return false;
}
int main(void){
long long int tmp = 111;
long long int ans = tmp*tmp*tmp;
int cnt = 1;
for( long long int i=1;i<=ans;i++)
if( isprime( i ) )
prime[cnt++] =i;
for( int i=1;i< cnt;i++){
long long int sum = 0;
for( int j= i;j<cnt;j++){
if( sum < ans ){
sum+= prime[j];
}
else if( sum == ans ){
printf("%d\n",prime[i]);
return 0;
}
else break;
}
}
return 0;
}