int main(void) { int num; int i, j; int enter = 0; // 먼저 소수의 정의를 알자. 1과 자기자신만 약수로 가진 양수. 1은 소수도 합성수도 아니다. 2는 소수중 유일한 짝수다. // 에라토스테네스의 체를 이용한 알고리즘. // 2를 남기고 2의 배수들을 지워나간다. 3을 남기고 3의 배수들을 지워나간다. // 이런식으로 계속 하다가 남은 수만 추려내면 소수가 된다. printf("정수하나를 입력하면 거기까지의 소수를 출력해줄 것입니다: "); while(scanf("%d", &num) == 1) { GetPrimeNumber(num); //입력을 받은 수만큼 배열안에 수들을 차례대로 저장. for(i = 2; i <= num; i++) { if(p_prime[i] == 0) //0인 수는 넘어감 continue; for(j = i + i; j <= num; j += i) //어떤 식으로 0을 집어넣는지 추적해보자. p_prime[j] = 0; } //출력 부분 for(i = 2; i < num; i++) { if(p_prime[i] != 0) { printf("%d\t", p_prime[i]); // 10칸식 나누어서 출력 enter++; if(enter % 10 == 0) putchar('\n'); } } putchar('\n'); printf("더 입력하실래요? (나가기는 q): "); } free(p_prime); return 0; }
uint32_t xpack::HashString(const std::string &s, uint8_t seed) { return torch::Hash::XXHash32(s.c_str(), s.length(), GetPrimeNumber(seed)); }
void mymult(){ ZZX mya, myb, c0, c1, x; ZZ q; int k = to_long(euler_toient(to_ZZ(Modulus_M))); GenPrime(q, Max_Prime); RandomPolyGen(mya, k, 1, q); RandomPolyGen(myb, k, Max_Prime, q); long da = deg(mya); long db = deg(myb); long bound = 2 + NumBits(min(da, db)+1) + MaxBits(mya) + MaxBits(myb); ZZ prod; set(prod); int prime_num = GetPrimeNumber(bound, prod); cout << prime_num << endl; long mk = NextPowerOfTwo(2*da+1); zz_p::FFTInit(0); long p = zz_p::modulus(); fftRep R1[prime_num]; fftRep R2[prime_num]; fftRep R3[prime_num]; fftRep R4[prime_num]; int size = 256; fftRep Rm[prime_num][size]; for(int i=0; i<prime_num; i++) for(int j=0; j<size; j++) Rm[i][j].SetSize(mk); for(int i=0; i<prime_num; i++){ zz_p::FFTInit(i); R1[i].SetSize(mk); R2[i].SetSize(mk); R3[i].SetSize(mk); R4[i].SetSize(mk); } myTimer tm; tm.Start(); CalculateFFTValues(R1, mya, prime_num, db); tm.Stop(); tm.ShowTime("My FFT:\t"); CalculateFFTValues(R2, myb, prime_num, db); tm.Start(); for(int i=0; i<prime_num; i++) for(int j=0; j<size; j++) Rm[i][j] = R2[i]; for(int j=0; j<size; j++){ CalculateFFTValues(R1, mya, prime_num, db); for(int i=0; i<prime_num; i++){ zz_p::FFTInit(i); mul(R3[i], R1[i], Rm[i][j]); add(R4[i], R4[i], R3[i]); } } CalculateFFTValues(R4, myb, prime_num, db); tm.Stop(); tm.ShowTime("My FFT:\t"); }