除去次方数(C语言版)
/* 除去次方数
* 自然数的平方数是:1 4 9 16 25 …
自然数的立方数是:1 8 27 64 125 …
自然数的4次方数是:1 16 81 256 …
…
这些数字都可以称为次方数。
1~10000中,去掉所有的次方数,还剩下多少个数字?
*/
//以下是我的代码
#include <stdio.h>
#include <math.h>
void main() {
int count=0;
int x,y;
for(y=2;y<=13;y++) { //因为2^13<10000,而2^14>10000
for(x=2;x<=100;x++){ //100的平方是10000
if(pow(x,y)<=10000)
count++;
}
}
printf("%d\n",10000-count+1);
}
运行的结果是:9856,正确的结果是9875.
在java中,同样的思路却可以运行出正确的结果。不知我这代码错在哪,望各位指出,谢谢。
[解决办法]
2^4=4^2,你扣了两遍
我很好奇你的java代码怎么对的。
[解决办法]
你如果不想考虑那么多,可以定义一个数组,遇到了那个数就吧数组置为0,然后统计非零的个数,就可以了。
[解决办法]
int count_non_pow_number(int N)
{
if(N < 1) return -1;
if(N == 1) return 0;
std::vector<int> v;
v.assign(N,0);
int sum=0;
for(int i=2; i<N; ++i)
{
if(v[i-1]==1) continue;
++sum;
int p=i*i;
while(p<=N)
{
v[p-1]=1;
p *= i;
}
}
return sum;
}