绝对素数:例如107和701都是素数,而且他们相反,所以他们是绝对素数。
我会求素数,但是不会求绝对素数,希望大神们能给予帮助啊,不甚感激,希望能在我的代码上补充就好了
#include<stdio.h>
int main()
{
int i,k,flag=1;
for(i=100;i<=999;i++)
{
flag=1;// notice
for(k=2;k<i;k++)
{
if(i%k==0)
{
flag=0;
}
}
if((flag==1)&&(i!=1))
{
printf("%d ",i);
}
}
}
http://blog.csdn.net/xianfajushi/article/details/25125133
加了一个生成相反的数的一个函数
#include<stdio.h>
#include<iostream>
using namespace std;
int reverse( int num )
{
int temp, target;
temp = num;
target = 0;
while( temp )
{
target = target*10 + temp % 10;
temp /= 10;
}
return target;
}
int main()
{
int i,k,flag=1;
for(i=100;i<=999;i++)
{
flag=1;// notice
for(k=2;k<i;k++)
{
int i_reverse = reverse(i);//得到相反的数
if(i%k==0||i_reverse%k==0)//同时判断是否能整除
{
flag=0;
}
}
if((flag==1)&&(i!=1))
{
printf("%d ",i);
}
}
printf("\n");
}
#include<stdio.h>
#include <math.h>
#define SWAP(a, b, t) t = (a), (a) = (b), (b) = (t); // 交换两个数的位置
int foo1(int m); // 计算素数 , 是返回1, 否返回0
int foo2(int m); // 计算反序数, 是返回1, 否返回0
int main()
{
int m, n, x;
int t;
scanf("%d%d", &m, &n);
if (m > n) // 如果第一个数大于第二个数,就交换位置 没有做<1000的判断, 需要可以加上去.
SWAP (m, n, t);
for (x = m; x <= n; x++)
if (foo1(x)) // 1. 计算x是否是素数
if (foo2(x)) // 2. 计算反序数是否是素数
printf("%d\n", x);
return 0;
}
int foo1(int m)
{
int i;
for (i = 2; i <= sqrt(m); i++)
if (m % i == 0)
return 0;
return 1;
}
int foo2(int m)
{
int x = 0, t = 0;
while(m) { // 求反序数
x = m % 10;
t = t * 10 + x;
m = m / 10;
}
if (foo1(t)) // 计算反序数是否是素数.
return 1;
return 0;
}