직접적인 피로
이 방법의 아이디어는n은 각각 2에서 (n-1)까지 모든 숫자를 나눕니다.판단하자면 나머지 0이 있으면 소수가 아니고 나머지가 0이 아니면 소수입니다.
함수:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int Prime(int num){
if (num <2){
//2是最小的素数所以直接排除更小的
return 0;
}
for (int i = 2; i <num; i++){
if (num%i == 0){
return 0;//能整除的就不是素数
}
}
return 1;// 素数得到
}
요구 100-200으로 소수 :
int main()
{
int num = 0;
for (num = 100; num <= 200; num++){
//输入100-200的素数
if (Prime(num) == 1){
//函数中return 1的都是素数
printf("%d\n", num);
}
}
system("pause");
return 0;
}
숫자가 소수인지 확인 :
int main()
{
int num = 0;
printf("输入一个数判断是否是素数:");
scanf("%d", &num);
int a=Prime(num);
if (a == 1){
printf("是素数");
}
else
printf("不是素数");
system("pause");
return 0;
}
반으로 자르다
for 루프의 조건 만 변경되어 계산량이 반으로 줄어 듭니다.
2가 가장 작은 제수이기 때문에 1/2 이후에 숫자를 균등하게 나누는 것은 불가능합니다.
현재 추가 "="기호가 있으므로 사각형 숫자가 제거됩니다.
int Prime(int num){
if (num <2){
return 0;
}
for (int i = 2; i <num; i++){
if (num%i == 0){
return 0;
}
}
return 1;
}
로 변경:
int Prime(int num){
if (num <2){
return 0;
}
for (int i = 2; i <=num/2; i++){
//这里的for条件改变
if (num%i == 0){
return 0;
}
}
return 1;
}
제곱근 함수 호출
for 루프의 조건도 변경되어 더 많은 계산이 직접적으로 줄어 듭니다.
숫자의 두 제수는 제곱근보다 작거나 같은 값을 가져야하기 때문입니다.
현재 추가 "="기호가 있으므로 사각형 숫자가 제거됩니다.
헤더 파일을 추가합니다.
#include <math.h>
int Prime(int num){
if (num <2){
return 0;
}
for (int i = 2; i <num; i++){
if (num%i == 0){
return 0;
}
}
return 1;
}
로 변경
int Prime(int num){
if (num <2){
return 0;
}
for (int i = 2; i <=sqrt(num*1.0); i++){
//这里引用了平方根函数sqrt
if (num%i == 0){
return 0;
}
}
return 1;
}
보충 :
2와 3을 제외하고 두 개의 소수가 인접 해 있지 않다는 것을 제외하고는 또 다른 최적화 아이디어가 있습니다. 따라서 i + = 2가 될 수 있습니다. 전제는 홀수 시작입니다