HDU1098 – JAVA編程語言程序開發技術文章

[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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *