判断一个数是否为素数
bool isPrime(int n){
if(n<=1) return false;
int sqr=(int)sqrt(1.0*n);//sqrt的参数要求是浮点数
for(int i=2;i<=sqr;i++)
{
if(n%i==0) return false;
}
return true;
}
如果代码量太多按照柳神这么写
bool isprime(int n) {
if(n <= 1) return false;
int sqr = int(sqrt(n * 1.0));
for(int i = 2; i <= sqr; i++) {
if(n % i == 0)
return false;
}
return true;
}
B1013
#include<iostream>
#include<vector>
using namespace std;
bool isprime(int a)
{
for(int i=2;i*i<=a;i++)
{
if(a%i==0) return false;
}
return true;
}
int main()
{
int m,n,b=0,num=2;
scanf("%d %d",&m,&n);
vector<int> v;
while(b<n){
if(isprime(num)){
b++;
if(b>=m) v.push_back(num);
}
num++;
}
b=0;
for(int i=0;i<v.size();i++)
{
b++;
if(b%10!=1) printf(" ");
printf("%d",v[i]);
if(b%10==0) printf("\n");
}
return 0;
}
B1007
除了2以外,其他的质数都是奇数
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int n){
if(n<=1) return false;
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++)
{
if(n%i==0) return false;
}
return true;
}
int main()
{
int n,count=0;
scanf("%d",&n);
for(int i=1;i<=n-2;i++)
{
if(isPrime(i)&&isPrime(i+2))
{
count++;
}
}
printf("%d",count);
return 0;
}
A1015
#include<bits/stdc++.h>
using namespace std;
bool isprime(int n)
{
if(n<=1) return false;
int sqr=int(sqrt(n*1.0));
for(int i=2;i<=sqr;i++)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int n,d;
while(scanf("%d",&n)!=EOF)//这里柳神用的实在太好了
{
if(n<0) break;
scanf("%d",&d);
if(!isprime(n)) {printf("No\n");continue;}
int len=0,arr[100];
//这段代码是把n转换为d进制,记住
do{
arr[len++]=n%d;
n=n/d;
}while(n!=0);
//这段代码是把d进制的n进行反转,得到的十进制数,记住
for(int i=0;i<len;i++)
{
n=n*d+arr[i];
}
if(isprime(n)) printf("Yes\n");
else printf("No\n");
}
return 0;
}
A1078
#include<bits/stdc++.h>
using namespace std;
bool isprime(int n)
{
if(n<=1) return false;
int sqr=int(sqrt(1.0*n));
for(int i=2;i<=sqr;i++)
{
if(n%i==0)
return false;
}
return true;
}
const int N=100001;
bool hashtable[N]={0};
int main()
{
int msize,n,a;
scanf("%d %d",&msize,&n);
while(!isprime(msize))//寻找第一个大于等于msize的素数
{
msize++;
}
for(int i=0;i<n;i++)
{
scanf("%d",&a);
int M=a%msize;
if(hashtable[M]==false){
hashtable[M]=true;
if(i==0) printf("%d",M);
else printf(" %d",M);
}
else
{
int step;//二次方探查法步长
for(step=1;step<msize;step++)
{
M=(a+step*step)%msize;
if(hashtable[M]==false){
hashtable[M]=true;
if(i==0) printf("%d",M);
else printf(" %d",M);
break;
}
}
if(step>=msize){
if(i>0) printf(" ");
printf("-");
}
}
}
return 0;
}