#include #include #include typedef struct { const char *podret; int pocet; } ZAZNAM; int main() { ZAZNAM *tabulka; char *retezec=NULL; int velikost,n; int c,i,k,j,pom,hash; velikost=n=0; while ((c=getchar())!='\n') { /* Ukázka, jak načítat vstup, když předem neznáme jeho délku*/ if (n>=velikost) { velikost=(velikost)?(2*velikost):128; retezec=(char*)realloc((void*)retezec,velikost); } retezec[n++]=c; } retezec[n]=0; for (velikost=2*n+1;;velikost+=2) { /* Najdeme nejbližší prvočíslo vyšší než 2N+1 */ for (i=3;i*i<=velikost && (velikost%i);i+=2); if (velikost%i) break; } tabulka=(ZAZNAM*)calloc(velikost,sizeof(ZAZNAM)); scanf("%d",&k); pom=1; /* Spočítáme hash pro prvních k znaků, za P zvolíme třeba 113 */ for (hash=i=0;i