#include <iostream> #include <bitset> using namespace std; #define N 590000000 bitset <N/2+1> t; int main(){ int i,j,k; printf("N=%d\n", N); for( i=1,k=3; k*k<N; k+=2,i++) if( !t.test(i) ) for( j=(i*i+i)*2; j+j<N; j += 2*i+1 ) t.set(j); cout << t.size()-t.count()-1; return 0; }
niedziela, 8 stycznia 2012
Sito Eratostenesa
sobota, 7 stycznia 2012
piątek, 6 stycznia 2012
Partycje
#include <stdio.h> void denew(int B, int * N, int * K){ int n,k,i,b; for( n=1; n<B; n++ ){ b=i=n; for( k=2; 2*k<=n; k++ ) { b = b*(--i)/k; if( b==B ) { *N= n; *K= k; return; } if( b>B ) break; } } *N=B; *K=1; } #define MAX 20 int n,k,licznik=0,wsie=0; int p[MAX+2]; int min( int x, int y) { return x<y ? x : y;} long long int silnia(int n){ long long int s=1; while(n) s*=n--; return s;} void PrintIt(int t, int z) { if( z>0 && t!=z) return; int i,pop; long long int perm; printf("%3d, %3d | ", ++licznik, t); p[t+1]=0; pop=1; perm=silnia(t); for(i=1; i<=t; i++){ if(p[i]!=p[pop]){ perm/=silnia(i-pop); pop=i;} printf("%2d ", p[i]);} perm/=silnia(i-pop); while(i++<23) printf(" "); printf(" %20llu\n", perm); wsie+=perm;} void P (int n, int k, int t, int z) { int j; p[t] = k; if (n==k) PrintIt(t, z); for (j=min(k,n-k); j>=1; j--) P(n-k,j,t+1,z);} int main() { int i, z ,d; scanf("%d %d",&i, &z); P(i*2, i, 0, z); for(i=1;i<23;i++) printf(" "); denew(wsie, &i, &z); printf("Wszystkich do kupy %14d=newton(%d,%d)\n", wsie, i, z); z=wsie & (-wsie); if( z== wsie){ for(i=1;i<23;i++) printf(" "); i=1; z=2; while( z != wsie) { i++; z*=2; } printf(" = 2 ^ %d\n", i); } return 0;}
Szybkie potęgowanie
double bpow(double x, long long int n){ double r=1; double xf, xi; xf=modf(x, &xi); while( 1 ){ if( n & 1 ){ r = r*xi + r*xf; } if( n>>=1 ) { xf = xf*xf + 2*xi*xf; xi *= xi; } else return r; }}
czwartek, 5 stycznia 2012
liczba rozwiązań
#define N 388 typedef unsigned long long int uint; void zero(uint * w){int i; for(i=0;i<=N;i++) w[i]=0;} void conv(uint * w, uint * a, int s, int e, int h){ int i,j,jj; zero(w); if(e>N/h) e=N/h; for(j=s*h,jj=s; jj++<=e; j+=h) for(i=0; i+j<=N; i++) w[i+j] +=a[i]; } int main(){ uint w[N+1], a[N+1]; int i; zero(a); for(i=0;i<=N;i++) a[i]=1; conv(w, a, 0, N, 2); conv(a, w, 0, N, 5); conv(w, a, 0, N, 10); conv(a, w, 0, N, 20); conv(w, a, 0, N, 50); conv(a, w, 0, N,100); conv(w, a, 0, N,200); printf("%llu\n",w[N]); //for(i=50>N?N:50;i>=0;i--) for( i=0; i<=N; i++ ) printf("%4d %20llu \n", i, w[i]); return 0; }
naiwny test
int prime( int n ) { //if( n<2 ) return 0; if( n%2 == 0 ) return n==2; if( n%3 == 0 ) return n==3; for(int d=5; d*d <= n; d += 6 ) if( n%d == 0 || n%(d+2) == 0 ) return 0; return 1;}
Subskrybuj:
Posty (Atom)