Có lẽ ý của bạn 652 là như thế này:
Đơn giản xét 2 số 2 và 3 thôi. Đã là số ngto(> 2, 3) thì sẽ không chia hết cho 2 và 3, nên nó sẽ có dạng 6i + 1 hoặc 6i + 5 (6i +- 1). Nên trong 6 số thì chỉ cần xét 2 số này (bước nhảy 2, 4), tiết kiệm được 2/3 số bước phải chạy. Tương tự nếu xét luôn số 5 thì số bước phải chạy chỉ là 8/30 (30i +- (1, 7, 11, 13)).
Thông thường người ta chỉ xét tới (2, 3) thôi, không cần phải sử dụng thêm 1 mảng để lưu trữ các bước nhảy. Như trường hợp xét tới số 5 thì bước nhảy là (2, 4, 6, 2, 6, 4, 2, 4).
Announcement
Collapse
No announcement yet.
[Help] Kiểm tra n có phải là số nguyên tố hay k?
Collapse
X
-
Originally posted by 12520527 View Post121 không chia hết cho 2,3,5,7 nhưng đâu phải số nguyên tố anh :nosebleed:
Leave a comment:
-
Vớ vẩn...thế thì nếu số đó là tích của 2 số nguyên tố lớn hơn 7 thì sao? 143 chẳng hạn...=))
Leave a comment:
-
Theo mình thì còn 1 cách đó là: Số nguyên tố thì ko chia hết cho các số 2, 3, 5,7 với yêu cầu số đó lớn hơn 7
Leave a comment:
-
Originally posted by 08520195 View Postvậy trường hợp số cực lớn (phải lưu = chuỗi) thì dùng sqrt ra sao
Leave a comment:
-
Originally posted by 11520579 View Posttheo ý kiến của mình thì nên để vòng for(int i=1;i<sqrt(n);i++)
như thế thì vòng lặp cũng đã lớn lắm rồi
và nhớ là phải ép kiểu dữ liệu về số nguyên (int) khi tính căn
Leave a comment:
-
theo ý kiến của mình thì nên để vòng for(int i=1;i<sqrt(n);i++)
như thế thì vòng lặp cũng đã lớn lắm rồi
và nhớ là phải ép kiểu dữ liệu về số nguyên (int) khi tính căn
Leave a comment:
-
Originally posted by 12520471 View Posttình hình là làm xong mà nhập số 3 vs 5 nó bảo k phải là số nguyên tố!:sogood:
xin các huynh chỉ giáo giúp.e new zo nên còn gà!
int main()
{
int n, i;
bool SNT = false;
printf("\nNhap vao N: ");
scanf("%d",&n);
if (n > 1)
{
SNT = true;
for (i = 2; i <= n/2; i++)
if(n % i == 0)
{
SNT = false;
break;
}
}
if (SNT == true)
printf("%d la so nguyen to!",n);
else
printf("%d khong la so nguyen to.");
return 0;
}Last edited by 11520317; 27-10-2012, 19:25.
Leave a comment:
-
nếu n là số lớn thì vòng for phải lặp rất nhiều, n = 7919 thì vòng for lặp 7919 lần.
for(int i = 1; i<= n && s<=3; i++){}
Leave a comment:
-
hì.thế mà mình k thấy...cứ tưởng {} là no nằm trong for chứ.:sogood:
tks bạn nhé.:kiss:
Leave a comment:
-
có ăn nhập đó anh. nếu cho i chạy từ 1 tới n thì đơn nhiên nếu là số nguyên tố thì nó phải chia hết cho 1 và n thì lúc đó s mới =2 được. còn nếu không phải là số nguyên tố thì s phải lớn hơn 2. còn bài của bạn thì đúng rồi, chỉ cần bỏ dâu ; sau hàm for là được. vì khi bạn viết dấu ; sau hàm for thì nó hiểu là đã kết thúc hàm for. vậy thì hàm if.... sau nó ko thuộc hàm for nên s vẫn = 0 cho nên nó báo ko phải là số nguyên tố rồi.Originally posted by 10520121 View PostĐoạn code của e có thể hiểu là:
- Nhập số n, cho i chạy từ 1 tới n, nếu n chia hết cho i thì tăng s 1 đơn vị. s = 2 thì nó là snt còn khác 2 thì nó ko phải số nguyên tố..
- Còn số nguyên tố là số chia hết cho 1 và chính nó.
Hai cái trên ko ăn nhập gì với nhau cả.
Như vậy e đã thấy mình sai gì chưa
Leave a comment:
-
Đoạn code của e có thể hiểu là:
- Nhập số n, cho i chạy từ 1 tới n, nếu n chia hết cho i thì tăng s 1 đơn vị. s = 2 thì nó là snt còn khác 2 thì nó ko phải số nguyên tố..
- Còn số nguyên tố là số chia hết cho 1 và chính nó.
Hai cái trên ko ăn nhập gì với nhau cả.
Như vậy e đã thấy mình sai gì chưa
Leave a comment:
-
[Help] Kiểm tra n có phải là số nguyên tố hay k?
tình hình là làm xong mà nhập số 3 vs 5 nó bảo k phải là số nguyên tố!:sogood:
xin các huynh chỉ giáo giúp.e new zo nên còn gà!
#include <stdio.h>
#include <conio.h>
void main()
{
int n,i,s=0;
printf("nhap gia tri cua n");
scanf("%d",&n);
for (i=1;i<=n;i=i+1);
{
if(n%i==0) s=s+1;
}
if(s==2) printf("so da cho la so nguyen to");
else printf("so da cho k phai la so nguyen to");
}Tags: None
Leave a comment: