开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情.
由于该题的思想与100以内的思想很像,故这里也将100以内的所有素数拿来进行对比
1.判断一个正整数是不是素数
解题思想:
既然是判断一个正整数是不是素数,那么我认为加入一个判断用户输入的数是不是正整数的判断条件是很有必要的,通过while循环来判断是否需要重新输入。而判断正整数是不是素数部分和判断100以内的所有素数的方式方法基本一致,无非就是从2到i值,判断i值和j值取余是否为0,为0则不为素数,不为0则为素数。
代码实现:
代码1:
void main(){
int i,j;
cout<<"请输入一个正整数:";
cin>>i;
while(i<=0){
cout<<"该数不是正整数,请重新输入:";
cin>>i;
}
for (j=2;j<i;j++)
{
if (i%j==0)
{
cout<<i<<"不是素数"<<endl;
break;
}else{
cout<<i<<"是素数"<<endl;
break;
}
}
}
代码2:
#include<stdio.h>
#include<math.h>
int prime(int n){
if(n==0){
return 0;
}
if(n==1){
return 0;
}
int k=sqrt(n);
for(int i=2;i<=k;i++){
if(n%i==0)
return 0;
}
return 1;
}
int main(){
int n;
int a;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a);
if(prime(a)){
printf("Yes\n");
}else{
printf("No\n");
}
}
return 0;
}
效果图展示:
2.输出100以内所有的素数
解题思想:
两个循环嵌套,两个if语句,一个标记变量,外部循环负责从1遍历到100,内部循环负责从2遍历到i值,标记变量flag负责记录一旦内部循环if条件语句成立,则变值,使该值无法输出,达到只输出素数的目的。
代码实现:
#include<iostream>
using namespace std;
void main()
{
int i;
for(i=1;i<=100;i++){
bool flag=true;
for(int j=2;j<i;j++){
if(i%j==0){
flag=false;
break;
}
}
if(flag==true)
cout<<i<<" ";
}
}
效果图展示: