C语言:亲密数对
题目描述
在自然数中有一种这样的数:它自身是一个完全平方数,加上1之后是一个素数,这一对数被称为亲密数对,请编程找出指定区域内的所有亲密数对。
例如在[10,100]之间的亲密数对有:(16,17),(36,37)
在[100,200]之间的亲密数对有:(100,101),(196,197)
在[1000,2000]之间的亲密数对有:(1296,1297),(1600,1601)
输入格式
一行,两个整型数据s和t,表示指定的区间[s,t],且10≤s≤t≤10,000,000,中间以空格分隔。题目保证指定区间内至少有一对亲密数
输出格式
每一对亲密数对占一行,第一个是完全平方数,第二个是素数,中间以空格分隔。
#include <stdio.h>
#include <math.h>
#include <string.h>
int prime(int n)
{
if(n<=1)
{
return 0;
}else{
int i;
int flag=1;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
flag=0;
}
}
if(flag==1)
{
return 1;
}else{
return 0;
}
}
}
int wanquan(int n)
{
int t=sqrt(n);
if(t*t==n)
{
return 1;
}else{
return 0;
}
}
int main()
{
int s,t;
scanf("%d%d",&s,&t);
int i;
for(i=s;i<t;i++) //i要小于t,不能等于t
{
if(wanquan(i)&&prime(i+1))
{
printf("%d %d\n",i,i+1);
}
}
return 0;
}