http://acm.hdu.edu.cn/showproblem.php?pid=2441 犀利的證明

來源:互聯網
上載者:User

/*<br />令F(1)=1,F(N)=∑F(d)%2 (d|N 且d!=N)<br />F(N)=1,則N在數組裡。(除了1以外)<br />1.對於N=P^a<br /> F(P)=F(1)=1,F(P*P)=F(1)+F(P)=0,F(P^a)=F(1)+F(P)+……F(P^(a-1))=F(1)+F(P)=0;<br />2.對於N=P^a Q^b<br /> a=1時 b=1 F(N)=F(1)+F(P)+F(Q)=1<br /> b=2 F(N)=F(1)+F(P)+F(Q)+F(P×Q)=0<br /> b>2 歸納法 對b歸納<br /> F(N)=F(1)+F(P)+F(Q)+F(P×Q)+……+F(P×Q^(b-1))=F(1)+F(P)+F(Q)+F(P×Q);<br /> a=2時 b=1 F(N)=0<br /> b=2 F(N)=F(1)+F(P)+F(Q)+F(P×Q)+F(P^2*Q)+F(Q^2*P)=0<br /> b>2 歸納法 對b歸納<br /> F(N)=∑F(P^2×Q^i)(1<i<b)+∑F(P×Q^i)(1<i<=b)=0+0=0<br /> a>2時 b=1 F(N)=0<br /> b=2 F(N)=F(1)+F(P)+F(Q)+F(P×Q)+F(P^2*Q)+F(Q^2*P)=0<br /> b>2 F(N)=F(1)+F(P)+F(Q)+F(P×Q)+∑F(P^i×Q^j)(1=<i<a,1=<j<=b)+∑F(P^a×Q^j)(1=<j<b) =F(1)+F(P)+F(Q)+F(P×Q)+0+0=0<br />3.我們假設 N=P1^a1……Pk^ak 滿足僅當a1=……=ak=1時 F(N)=1<br /> 則N=P1^a1……P(k+1)^a(k+1)時<br /> 1)當a1=……=ak=a(k+1)=1時<br /> F(N)=F[1]+∑F(Pt1)+∑F(Pt1×Pt2)+∑F(Pt1*Pt2*Pt3)……+∑F(Pt1*Pt2*Pt3*……Ptk)<br /> =F[1]+C[K+1,1]+C[K+1,2]+……+C[k+1,k]=2^(k+1)-1=1<br /> 2)當at>1時<br /> F(N)=F[1]+∑F(Pt1)+∑F(Pt1×Pt2)+∑F(Pt1*Pt2*Pt3)…+∑F(Pt1*Pt2*Pt3*…Ptk)+F(P1*P2*P3*……P(k+1))<br /> =F[1]+C[K+1,1]+C[K+1,2]+……+C[k+1,k]+C[k+1,k+1]=0<br />由歸納法~可知 N=P1^a1……Pk^ak 滿足僅當a1=……=ak=1時 F(N)=1<br /> */<br />import java.util.*;<br />import java.math.*;<br />import java.io.*;<br />public class Main {<br />static Scanner cin = new Scanner(new BufferedInputStream(System.in));<br />static final int N = 1300000;<br />static boolean hash[] = new boolean[N];<br />static int prime[] = new int[130000];<br />static int m;<br />public static void main(String[] args) {<br />BigInteger a;<br />Prime();<br />while (cin.hasNext()) {<br />a = cin.nextBigInteger();<br />if (a.equals(BigInteger.ZERO))<br />break;<br />if (a.equals(BigInteger.ONE)) {<br />System.out.println("no");<br />} else {<br />if (Hxsh(a)) {<br />System.out.println("yes");<br />} else {<br />System.out.println("no");<br />}<br />}<br />}<br />}<br />static boolean factor(BigInteger n) {<br />int i = 0;<br />BigInteger x = BigInteger.valueOf(prime[0] * prime[0]);<br />for (i = 0; x.compareTo(n) < 1;) {<br />BigInteger y = BigInteger.valueOf(prime[i]);<br />BigInteger z = n.mod(y);<br />if (z.compareTo(BigInteger.ZERO) == 0) {<br />int s = 0;<br />while (z.compareTo(BigInteger.ZERO) == 0) {<br />n = n.divide(y);<br />s++;<br />if (s > 1)<br />return false;<br />z = n.mod(y);<br />}<br />}<br />i++;<br />x = BigInteger.valueOf(prime[i] * prime[i]);<br />}<br />return true;<br />}<br />static void Prime() {<br />m = 0;<br />Arrays.fill(hash, (boolean) false);<br />hash[1] = true;<br />int temp = (int) Math.sqrt(1.0 * N);<br />for (int i = 2; i < temp; i++)<br />if (!hash[i])<br />for (int j = i + i; j < N; j += i)<br />hash[j] = true;<br />for (int i = 2; i < N; i++)<br />if (!hash[i])<br />prime[m++] = i;<br />// System.out.println(m);<br />}<br />static boolean Hxsh(BigInteger a) {<br />for (int i = 0; i < m && BigInteger.valueOf(prime[i]).compareTo(a) != 1; i++) {<br />int flag = 0;<br />// System.out.println(i);<br />BigInteger xi = a.mod(BigInteger.valueOf(prime[i]));<br />// System.out.println(xi);<br />// System.out.println(prime[i]);<br />while (xi.compareTo(BigInteger.ZERO) == 0) {<br />a = a.divide(BigInteger.valueOf(prime[i]));<br />// System.out.println(a);<br />flag++;<br />if (flag > 1)<br />return false;<br />xi = a.mod(BigInteger.valueOf(prime[i]));<br />// System.out.println(xi);<br />}<br />}<br />return true;<br />}<br />} 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.