void main()
{
int i,x,flag,n
scanf("%d",&n)
for(x=3x<nx++)
{
flag=1
for(i=2i<x/2i++)
if(x%i==0)
{
flag=0
break
}
if(flag==1)
printf("%d\n",x)
}
}
#include <stdio.h>#define true 1
#define false 0
long isprime(int n)
long mypow(int m, int n)
int main()
{
int n,a
for(n=2n<20n++)
{
a = mypow(2,n)+1
if(isprime(n)&&isprime(a))
{
printf("%d是梅森素数\n", a)
}
}
return 0
}
long mypow(int m, int n) {
long ans = 1
int i = 0
for (i <ni++) {
ans *= m
}
return ans
}
long isprime(int n) {
int x = 0
if (n <2) return false
if (n == 2|| n==3) {
return true
}
// 6x 6x+1 6x+2 6x+3 6x+4 6x+5
// 6x+2 =>2(3x+1)
// 6x+3 =>3(2x+1)
// 6x+4 =>2(3x+2)
if (n % 6 != 1 &&n % 6 != 5) {
return false
}
for (x = 5x * x <= nx += 6) {
if (n % x == 0 || n % (x+2) == 0) {
return false
}
}
return true
}
0分。。。自己调吧。#include <stdio.h>
int IsPrime(unsigned int n){
unsigned int i
for(i=2i<ni++){//对大于1小于n的数进行循环
if(n%i == 0){//如果期间有能整除的数,直接返回0
return 0
}
}
return 1//返回1
}
int IsMPrime(unsigned int n){
if(IsPrime(n) ==0){//如果此数本身不是素数直接返回0
return 0
}
unsigned int p
unsigned int x
p=0
x=n+1
wihle(x !=1){//求出比x大且与x最近的2的p次方中的p
x=x>>1
p++
}
if(pow(2,p) != n+1){//如果此数+1不是2的p次方,则直接返回0
return 0
}
return IsPrime(p)//判断p是否为素数,返回判断值
}
int main(){
unsigned int m
scanf("%d”,&m)
if(m >1000){//为了防止输入的数太大导致机器死掉,限定输入的数小于1000。
return 0
}
for(m>0m--){//对大于0,小于输入数的整数挨个进行判断
if(IsMPrime(m) ==1){//如果是梅森素数直接打印
printf("%d,",m)
}
}
return 0//结束程序
}