当前位置:编程学习 > JAVA >>

HDU1098


[java] 
/*
 *f(x)=5*x^13+13*x^5+k*a*x
 *要使f(x)被65整除f(x)肯定为整数,----》x为整数!=0
 *f(x+1)=5*(x+1)^13+13*(x+1)^5+k*a*(x+1),将f(x+1)按二项式定理展开有:
 *f(x+1)=5*(c(13,0)*x^13+c(13,1)*x^12+c(13,2)*x^11+....+c(13,12)*x+c(13,13)*x^0)+
 *     13*(c(5,0)*x^5+c(5,1)*x^4+.....+c(5,4)*x^1+c(5,5)*x^0)+k*a*(x+1)
 *由于c(13,1)...c(13,12)中间一定可以提取一个13,则有这些项*5之后一定可以被65整除
 * 同理c(5,1)...c(5,4)一定可以提取一个5,则有这些项*13之后一定可以被65整除
 *所以:f(x+1)=5*(c(13,0)*x^13+c(13,13)*x^0)+13*(c(5,0)*x^5+c(5,5)*x^0)+k*a*(x+1)
 *只需要k*a*(x+1)能被65整除
 *即k*a*x能被65整除
 *要想取a最小值,x要取最小1或者-1.
 *所以只需要18+k*a或者-18-k*a能被65整除。
 *要使(18+k*a)%65==0
 *k*a肯定为65的倍数-18=47
 *而k最小为1.所以a最大为65 就可以了。
 * */ 
import java.util.Scanner; 
 
public class HDU1098 { 
 
    public static void main(String[] args) { 
        Scanner sc = new Scanner(System.in); 
        int k; 
        while (sc.hasNext()) { 
            k = sc.nextInt(); 
            int flag = 0; 
            for (int i = 1; i < 66; i++) { 
                if (( k * i) % 65 == 47) {//或者if ((18 + k * i) % 65 == 0) 
                    System.out.println(i); 
                    flag = 1; 
                    break; 
                } 
            } 
            if (flag == 0) 
                System.out.println("no"); 
        } 
    } 

作者:lhfight
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,