Đọc đề kỹ lắm, cũng phát hiện ra từ lúc làm, nói là vậy thôi, tốt nhất cũng nên làm luôn cho chắc, đâu có mất nhiêu thời gian. Khỏi mắc công phiền phức khiếu nại.
Bài 1: (hình như có giống thuật toán với ai post rồi thì phải, nhưng sẽ nhanh hơn vì mình tối ưu các dòng lệnh kiểm tra và tính toán rồi)
Bài 1: (hình như có giống thuật toán với ai post rồi thì phải, nhưng sẽ nhanh hơn vì mình tối ưu các dòng lệnh kiểm tra và tính toán rồi)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
unsigned long* ngto;
unsigned long i = 1, dem = 1, n,j;
long dk = 1;
scanf("%d",&n);
ngto = (unsigned long*) calloc(n,sizeof(unsigned long));
ngto[0] = 2;
if (n==1) printf("2\n");
else
while (true)
{
i += 2;
for (j = 1; j < dk; j++)
{
if (i % ngto[j] == 0) { break; }
}
if (j==dk) { ngto[dem] = i; dem++; if (dem == n) { printf("%d",i); break; } if (i > ngto[dk-1] * ngto[dk]) dk++; }
}
}
#include <stdlib.h>
#include <math.h>
int main()
{
unsigned long* ngto;
unsigned long i = 1, dem = 1, n,j;
long dk = 1;
scanf("%d",&n);
ngto = (unsigned long*) calloc(n,sizeof(unsigned long));
ngto[0] = 2;
if (n==1) printf("2\n");
else
while (true)
{
i += 2;
for (j = 1; j < dk; j++)
{
if (i % ngto[j] == 0) { break; }
}
if (j==dk) { ngto[dem] = i; dem++; if (dem == n) { printf("%d",i); break; } if (i > ngto[dk-1] * ngto[dk]) dk++; }
}
}
Comment