注册 登录
编程论坛 JAVA论坛

java小白~筛选次方数~怎么结果错了~

九转星河 发布于 2017-03-11 10:22, 1266 次点击
提高题:除去次方数
自然数的平方数是:1  4  9  16  25  …
自然数的立方数是:1  8  27  64  125  …
自然数的4次方数是:1  16  81  256  …

这些数字都可以称为次方数。
1~10000中,去掉所有的次方数,还剩下多少个数字?~

程序代码:
public static void main(String[] args) {
        int a[]=new int[10000];
       int t,i,k,s=1,j,m=0,sum,l;
{for(i=0;i<10000;i++)
    a[i]=i+1;}
   
for(t=2;t<=100;t++)
for(l=2;l<=13;l++)   
{for(k=1;k<=l;k++)
    s=s*t;
   if(s<=10000)
   {for(j=0;j<10000;j++)
   {if(a[j]==s){ m++;a[j]=0;}}}
        s=1;
}   
   
    sum=10000-m-1;
    System.out.println(sum);
   
    }

}



[此贴子已经被作者于2017-3-11 23:07编辑过]

3 回复
#2
梦月神游2017-03-11 11:12
回复题主, m++;a[j]=0;
你那个方法存在int 型数据溢出问题,8^11 int的计算结果为0。
(int )8^12=0*0=0;
(int )8^13=0*0=0;

(int )16^8=0;
当然把m++;a[j]=0;换成1可以得出正确结果,但这种方法不值得提倡,只是说明问题所在。

所以倒不如换一种方法,循环主体四行代码就可以了。

答案是9875。

程序代码:
public class Lab2_2_4 {
    public static void main(String[] args){
        int sum[]=new int [10001];/*初始化已经赋值为0*/
        
        int i=0;
        int j=1;
        int a=0;
        
        for (i=2;i!=101;++i)
            for (a=i*i;a<10001;a*=i)
                if (sum[a]!=1)
                   j+=sum[a]=1;
        
        
        System.out.println(10000-j);
    }
}
#3
九转星河2017-03-11 11:20
回复 2楼 梦月神游
结~~~~~~~~~~~~~~~~~~~~~~~~~
#4
九转星河2017-03-11 11:20
问题已经解决~~~~~~~JAVA人气少~~回复的比C要少~~~~先结贴为妙~~~~~~~~~~~~~
1