京东第二题 暴力破解

public class Main{
            static long mod=1000000007;


static boolean isPrime(long n){

    long s=(long) Math.sqrt(n);

    for(long i=2;i<=s;i++){

        if(n%i==0)

            return false;

    }

    return true;

}

//long mod=1000000007;

static long numParameter(long b){

    long s=(long) Math.sqrt(b);

    long count=0;

    for(long i=2;i<=s;i++){

        if(b%i==0){

            count=(count+2)%mod;

        }

    }

    return count%mod; 

}

public static void main(String[] args) {

   

    Scanner in=new Scanner(System.in);

    while(in.hasNext()){//注意while处理多个case

    long n=in.nextLong();

        if(n<1)

        System.out.println(0);

        else{

            long sum=0;

            for(long i=1;i<=n;i++){

                for(long j=1;j<=n;j++){

                    long a=i;

                    long b=j;

                    long s=(long)Math.pow(a,b);

                    if(s==1){

                        sum=(sum+n*n)%mod;

                        break;

                    }else{

                        //panduan is sushu

                        if(isPrime(a)&&isPrime(b)){//it is prime

                            sum=(sum+1)%mod;

                            //System.out.println(j+"  "+sum);

                        }else{

                            if(isPrime(a)&&!isPrime(b)){

                                //qiu yinzi sum

                                long num=numParameter(b);

                                sum=(sum+num+1)%mod;

                            }else if(!isPrime(a)&&isPrime(b)){

                                //qiu yinzi sum

                                long num=numParameter(a);

                                sum=(sum+num+1)%mod;

                            }else{

                                //qiu yinzi sum

                                long num1=numParameter(b);

                                long num2=numParameter(a);

                                long num=(num1*num2)%mod;

                                sum=(sum+num+1)%mod;

                            }

                        }

                    }

                }

               

            }

            sum=sum%mod;

            System.out.println(sum);

        }

    }

}
}
全部评论
能过?
点赞 回复 分享
发布于 2017-09-08 21:28
没有,时间超了
点赞 回复 分享
发布于 2017-09-08 21:56
没来的及验证,预计时间超了
点赞 回复 分享
发布于 2017-09-08 21:56
暴力破解了下,过了20%。
点赞 回复 分享
发布于 2017-09-08 22:01
老哥们 看看我的 交卷后写的 应该能AC package jindong; import java.util.Scanner; public class Demo2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNext()) { int n = in.nextInt(); //a b c d互不相同的情况 有多少种 long count = 0; w :for (int i = 2; i <= n; i++) { int t = 0; for (int j = 2; j <= n; j++) { if (Math.pow(j, i) <= n) t++; else { count += (n / i) * t * 2; break w; } } } //加上 a和c都为1 和 a和c都不为1且a和c相等 b和d相等 两种情况 count += n * n + (n - 1) * n; System.out.println(count % 1000000007); } } }
点赞 回复 分享
发布于 2017-09-08 22:44
暴力过20%
点赞 回复 分享
发布于 2017-09-08 23:22

相关推荐

11-01 08:48
门头沟学院 C++
伤心的候选人在吵架:佬你不要的,能不能拿户口本证明过户给我。。球球了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务