现在给出一个素数,这个素数满足两点:
1、 只由1-9组成,并且每个数只出现一次,如13,23,1289。
2、 位数从高到低为递减或递增,如2459,87631。
请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。
现在给出一个素数,这个素数满足两点:
1、 只由1-9组成,并且每个数只出现一次,如13,23,1289。
2、 位数从高到低为递减或递增,如2459,87631。
请你判断一下,这个素数的回文数是否为素数(13的回文数是131,127的回文数是12721)。
输入只有1行。第1行输入一个整数t,保证t为素数。数据保证:9<t<109
输出一行字符串,如果t的回文数仍是素数,则输出“prime”,否则输出"noprime"。
13
prime
13的回文数是131,131是素数
17
noprime
17的回文数是171,171不是素数(因子有3)
素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。
素数的回文数为题意中的定义,1331不是素数的回文数。
#include <stdio.h>
#include <math.h>
int func(long int n){
if(n==1){
return 0;
}
else {
for(int i=2;i<sqrt(n);i++){
if(n%i==0){
return 0;
}
}
return 1;
}
}
int main() {
int n;
scanf("%d",&n);
int a[100],i=0;
while(n){
a[i]=n%10;
n/=10;
i++;
}
for(int j=0,k=i-1;j<i/2;j++,k--){
int temp=a[j];
a[j]=a[k];
a[k]=temp;
}
for(int j=i-2;j>=0;j--){
a[i]=a[j];
i++;
}
long long b=0;
for(int j=i-1,k=0;j>=0;j--,k++){
b+=a[j]*pow(10,k);
}
if(func(b)==0){
printf("noprime");
}
else{
printf("prime");
}
return 0;
}
#include<stdio.h>
#include<math.h>
int Is_prime(long k)
{
long i = 0;
for(i=2;i<=sqrt(k);i++)
{
if(k % i==0)
{
return 0;
}
}
return 1;
}
long exchange(int k,int count)
{
int x = 0;
long sum = k *pow(10,count-1);
k = k / 10;
while(k)
{
x= k % 10;
k = k /10;
sum = sum + x *pow(10,count-2);
count--;
}
return sum;
}
int judge(int k )
{
int count = 0;
while(k)
{
k = k / 10;
count ++;
}
return count;
}
int main()
{
int k = 0;
scanf("%d\n",&k);
int count = judge(k);
long ret_number = exchange(k,count);
int ret = Is_prime(ret_number);
if(ret==1)
{
printf("prime\n");
}
else
{
printf("noprime\n");
}
return 0 ;
} 代码运行提示“您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。”请问该怎么办?
#include <stdio.h>
#include<math.h>
int main() {
//获取素数
int a=0;
scanf("%d",&a);
//将素数的每一位数分别存入数组并获得位数长度n
int sum[100],n=0;
for (int x=0; a!=0; x++) {
sum[x]=a%10;
a/=10;
n++;
}
//第一遍存入的元素顺序相反 需要重新调成位置为正序
int wei=n-1,zhong=0;
for (int x=0; x<n/2; x++) {
zhong=sum[x];
sum[x]=sum[wei];
sum[wei]=zhong;
wei--;
}
//将素数转换成回文数
for (int x=n-2; x>=0; x--) {
sum[n]=sum[x];
n++;
}
//将数组中的回文数赋值到整形变量he中
int y=n-1,fang=0;long long he=0;
for (int x=0; x<n; x++) {
he+=sum[y]*(pow(10, x));
y--;fang++;
}
//判断该回文数是否为素数
int c=0;
for (int x=2; x<he; x++) {
if (he%x==0) {
c=1;
break;
}
}
if (c==0) {
printf("prime");
}
else {
printf("noprime");
}
return 0;
} #include<stdio.h>
#include<math.h>
long long fact(int a){
int j=a,d=a;
int i=0,b,c=0;
long long k=0;
while(a>0){
a=a/10;
i++;
}
c=i;
while(i>=0){
b=j%10;
j=j/10;
k=k+b*pow(10,i-1);
i--;
}
return (k+(d/10)*pow(10,c));
}
int main(){
int h,count=0,num=1,k;
long long l;
scanf("%d",&h);
l=fact(h);
k=(int)sqrt(l);
for(int i=2;i<=k;i++){
if(l%i==0){
num=0;
break;
}
else{
num=1;
}
}
if(num)
printf("prime");
else printf("noprime");
return 0;
} #include <stdio.h>
#include <math.h>
//我这个运行时间27ms,内存416kb是不是太大了
int IsPriNum(int num)
{
int flag = 1;//假设是素数
int tmp = num;
int dig = 0;
while (tmp)//求位数
{
tmp /= 10;
dig++;
}
long long sum = num * pow(10, --dig);//4位数*1000,3位数*100...
tmp = num / 10;//去掉不用变的个位数(变回文数后在中间)
while (dig)//求回文数
{
sum += (tmp % 10) * pow(10, --dig);
tmp /= 10;
}
//判断回文数是否为素数
for (int i = 2; i <= sqrt(sum); i++)
{
if (sum % i == 0)
return 0;//不用flag=0了直接返回0就行
}
return flag;
}
int main()
{
int pri_num;
scanf("%d", &pri_num);
if (IsPriNum(pri_num))
printf("prime\n");
else
printf("noprime\n");
return 0;
} #include <stdio.h>
#include<math.h>
long long makeprl(long long t)
{
long long k = 0;
k=t;
k/=10;
while(k)
{
t = t*10+k%10;
k/=10;
}
return t;
}
void judge(long long k)
{
long long i;
int flag = 1;
for(i=2;i<sqrt(k);i++)
{
if(k%i==0)
{
flag = 0;
break;
}
}
if(flag==1)
{
printf("prime");
}
else {
printf("noprime");
}
}
int main()
{
long long t;//真服了,刚开始用的int类型,我想了半天,凎;
scanf("%lld",&t);
long long ret = makeprl(t);
judge(ret);
return 0;
} #include<stdio.h>
#include<math.h>
int isprime(long long int x)
{
if(x==1)
return 0;
if(x==2)
return 1;
for (int i = 2; i <= sqrt(x); i++)
if (0 == x % i)
return 0;
return 1;//1素数
}
int main()
{
int n;
scanf("%d", &n);
int arr[100], i = 0, count = 0;
while (n)
{
arr[i++] = n % 10;
n /= 10;
count++;
}//把n按数位倒序存入数组中
int k = 0;
long long int num = 0;
for (int i = count-1;i >= 0;i--)
{
num += arr[i] * (pow(10, k++));
}
for (int i = 1;i <= count-1;i++)
{
num += arr[i] * (pow(10, k++));
}//形成回文数
if (isprime(num) == 0)
printf("noprime\n");
else
printf("prime\n");
return 0;
} #include <stdio.h>
typedef long long LL;
LL hw(LL num)
{
LL t = num/10;
while(t)
{
num = num*10 + t%10;
t/=10;
}
return num;
}
char* is_prime(LL num)
{
if(num<2) return "noprime";
for(int i = 2;i<=num/i;i++)
{
if(num%i==0) return "noprime";
}
return "prime";
}
int main()
{
LL num = 0;
scanf("%lld",&num);
LL re = hw(num);
printf("%s",is_prime(re));
return 0;
} #include <stdio.h>
#include<math.h>
long long huiwen(long long x)
{
long long n=x;
long long i;
while((x/10)!=0)
{
i=(x/10)%10;
x=x/10;
n=n*10+i;
}
return n;
}
int is_prime(long long y)
{
long long i,n,k;
k=sqrt(y);
for(i=2;i<=k;i++)
{
if(y%i==0)
{
return 0;
}
}
return 1;
}
int main()
{
long long n,m,val=0;
scanf("%lld",&n);
m=huiwen(n);
val=is_prime(m);
if(val==1)
{
printf("prime");
}
else if(val==0)
{
printf("noprime");
}
return 0;
}
#include <math.h>
#include <stdio.h>
long palindrome_number(long n);
long isPrime(long n);
int main() {
long n, palindrome;
scanf("%ld", &n);
palindrome = palindrome_number(n);
if(isPrime(palindrome)){
printf("prime\n");
} else {
printf("noprime\n");
}
return 0;
}
long palindrome_number(long n){
long palindrome = n, digit, copy = n;
copy /= 10;
while (copy) {
digit = (copy) % 10;
palindrome = 10 * palindrome + digit;
copy /= 10;
}
return palindrome;
}
long isPrime(long n){
long mark = 1;
for(long i = 2; i <= sqrt(1.0 * n); i++){
if(n % i == 0){
mark = 0;
break;
}
}
return mark;
}