查看: 711|回复: 1

判断质数

[复制链接]

237

主题

314

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
21620
发表于 2023-3-26 11:52:33 | 显示全部楼层 |阅读模式
方法一:

[C++] 纯文本查看 复制代码
bool prime(int x){
        int i=2;
        if(x==1||x==0) return false;
        while(i<=floor(sqrt(x))&&(x%i!=0))
                i++;
        if(i>floor(sqrt(x)))  //此条件作用:边界限制
                return true;
        return false;
}


如果没有边界限制则是:
[C++] 纯文本查看 复制代码
#include <bits/stdc++.h>
using namespace std;
bool prime(int x){
	int i = 2;
	if(x == 1) return 0;
	while(i <= floor(sqrt(x)) && x % i != 0) {
		i++;
		return 1;	
	}
	return 0; 
}
int main(){
	int n;
	scanf("%d",&n);
	printf("%d",prime(n));
	return 0;
} 

但是此时很多情况会被排除,例如:2,3.....


放入主程序中分辨:
[C++] 纯文本查看 复制代码
int main(){
        int i = 2, x;
        cin >> x;
        while(i <= floor(sqrt(x)) && x % i != 0) i++;
        cout << i<< endl;
        if(i > floor(sqrt(x))) cout << x << " " << "i=" <<i;
        return 0;
}



方法二:
[C++] 纯文本查看 复制代码
#include <bits/stdc++.h>
using namespace std;
int main(){
    int x, y, t = 0;
    cin >> x >> y;
    if(x==1) t --; 
    bool flag;
    for(int i = x; i <= y; i++){
    flag = true; 
        for(int j = 2;j <= sqrt(i); j++){
            if(i % j == 0 ) {
                flag = false;
                break;
            }  
        }
        
    if(flag == true) {
        t++;
    }
    }
    cout << t;
    return 0;
} 



回复

使用道具 举报

237

主题

314

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
21620
 楼主| 发表于 2024-4-4 14:12:39 | 显示全部楼层
[C++] 纯文本查看 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    for(int i = 2; i < 100; i++){
    	for(int j = 2; j <= i; j++){
    		if(i == j){
    			printf("素数为:%d\n", i);
			}
			if(i % j == 0 ){
				break;
			}
		}
	} 
    return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表