洛谷P1217
来填坑了,虽然是参考了一下别人的思路
果然代码的尽头是数学
我今天才知道原来bool型是c++里面的,很多版本的c语言库不支持
下面是我参考别人的代码+我自己改的代码,虽然不是最优解,再开一个坑,如果以后找到更好的解法了再发到这里
#include <stdio.h>
#include <math.h>
#include <string.h>
//判断这个数是几位数
int jiwei(int x)
{
int y = 1;//返回几位数//因为如果是个位数的话就为0
while (x / 10 != 0)
{
x = x / 10;
y++;
}
return y;
}
//判断是不回文数可以做指数翻转
int ishuiwen(int n)
{
int s = 0, k = n;
if(jiwei(n)%2!=0||jiwei (n)==2)//偶数位回文数必然会被11整除
{
while (k != 0)//进行翻转操作
{
s *= 10;
s += k % 10;
k /=10;
}
if (s == n)return 1;
}
return 0;
}
int iszhishu(int n) {
for (int i = 3; i <= sqrt(n); i=i+2)
{
if (n % i == 0)return 0;
}
return 1;
}
//因为质数必定是奇数
int main() {
int a, b;
scanf("%d%d", &a, &b);
if (a % 2 == 0) a++;
for (int i = a; i <= b; i = i + 2)
{
if (ishuiwen(i) && iszhishu(i))
{
printf("%d\n", i);
}
}
}
在别人那里学习参考的点
1.回文数利用指数翻转的方法来判断
2.数论的部分内容
长度为偶数的数必然可以被11整除(4位及以上
质数必然是奇数(虽然但是,不看别人的我还真的就是没想到
其实我昨天写了一个用数组去判断回文数的代码,但是没有调通,先开一个坑,希望这个暑假能填掉