现在给出一个素数,这个素数满足两点:
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 main(){
char arr[100] = " ";
int len = 0;
scanf("%s", arr);
while(arr[len] != '\000')
len++;
for(int i = len, j = len - 1; i < 2 * len - 1;)
arr[i++] = arr[--j];
len = 2 * len - 1;
long num = 0, count = 0, n = 1;
while(len--){
num += n * (arr[len]-'0');
n *= 10;
}
int i = 0, j = (int)sqrt(num);
for(i = 2; i <= j; i++){
if(num % i == 0)
break;
}
printf("%s", i > j? "prime" : "noprime");
return 0;
} #include<stdio.h>
#include<math.h>
#define N 20
int is_prime(long long num) {
for (int i = 2; i <= sqrt(num); i++)
if (0 == num % i)
return 0;
return 1;
}
int main() {
int arr[N] = {0}, i = 0, input = 0;
long long num = 0;
//按位数将数输入至数组中
scanf("%d", &input);
for (int j = 1; j < 10; j++) {
if (0 == input / (int)pow(10, j)) {
i = j - 1;
for (int k = j - 1; k >= 0; k--) {
arr[k] = input % 10;
input /= 10;
}
break;
}
}
for (int j = i + 1, k = i - 1; k >= 0; j++, k--)
arr[j] = arr[k];
//将数组还原成一个数
for (int j = 0; j <= 2 * i; j++) {
num = num * 10 + arr[j];
}
if (is_prime(num) == 1)
printf("prime\n");
else
printf("noprime\n");
return 0;
}
循环到我自己都不想看了🤣🤣🤣
#include<iostream>
#include<cmath>
using namespace std;
int main() {
long n;
cin >> n;
// 构造回文数
long tmp = n / 10;
while (tmp) {
n = n * 10 + tmp % 10;
tmp /= 10;
}
// 判断是否为素数
for (long i = 2; i <= (long)sqrt(n); ++i) {
if (n % i == 0) {
cout << "noprime";
return 0;
}
}
cout << "prime";
return 0;
} #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;
} import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
long pali = palindrome(n);
if (isprime(pali)){
System.out.println("prime");
} else {
System.out.println("noprime");
}
}
public static long palindrome(int n){
String num = Integer.toString(n);
StringBuilder palinum = new StringBuilder(num);
for (int i = num.length()-2; i >= 0; i--) {
palinum.append(num.charAt(i));
}
return Long.parseLong(palinum.toString());
}
public static boolean isprime(long pali){
int count = 0;
for (int i = 2; i < Math.sqrt(pali); i++) {
if (pali % i == 0){
count++;
}
}
return count == 0;
}
} #include <iostream>
#include<cmath>
using namespace std;
long long getHuiWen(int n){
long long m=n;
n/=10;
while(n){
m=m*10+n%10;
n/=10;
}
return m;
}
bool isPrime(long long n){
if(n<2)
return false;
for(long long i=2;i<=sqrt(n);i++){
if(n%i==0)
return false;
}
return true;
}
int main() {
int n;
cin>>n;
//先求出回文数
long long m=getHuiWen(n);
if(isPrime(m))
cout<<"prime"<<endl;
else
cout<<"noprime"<<endl;
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>
int main()
{
int a;
scanf("%d", &a);
int count=0;
int ret=a;
while (ret)
{
ret/=10;
count++;
}
long long sum=a*pow(10, --count);
ret=a/10;
while (count)
{
sum+=(ret%10)*pow(10, count-1);
count--;
ret/=10;
}
for (int i=2; i<=sqrt(sum); i++)
{
if (sum%i==0)
{
printf("noprime");
return 0;
}
}
printf("prime");
return 0;
}
//抄的,好多地方看不懂,跟着过了一遍。
#include<stdio.h>
#include<math.h>
long long hw(long long t)
{
int a=0;
long long b=t;
for(;b!=0;)
{
b/=10;
a++;
}
long long d=t;
for(;a>1;a--)
{
d=(d*10+t/10%10);
t/=10;
}
return d;
}
int su(long long t)
{
long long a;
int b=0;
if(t%2==0)
{
return 0;
}
long double c=sqrt(t);
for(a=3;a<c;a+=2)
{
if((t%a)==0)
{
b++;
break;
}
}
if(b==0)
{
return 1;
}
else
{
return 0;
}
}
int main()
{
long long t;
scanf("%lld",&t);
t=hw(t);
t=su(t);
if(t==1)
{
printf("prime");
}
else if(t==0)
{
printf("noprime");
}
return 0;
} //BC157 素数回文
#include "stdio.h"
#include "math.h"
int isPrimeNumber(long long a);
long long hw(long long t);
int main(){
long long x;
scanf("%lld",&x);
if(isPrimeNumber(x) == 1){
long long hws;
hws = hw(x);
if(isPrimeNumber(hws) == 1)
printf("prime");
else
printf("noprime");
}
else
printf("noprime");
return 0;
}
int isPrimeNumber(long long a){
for(long long i=2;i<sqrt(a);i++){
if(a%i==0)
return 0;
}
return 1;
}
long long hw(long long t){
long long m=t;
t/=10;
while(t!=0){
m=m*10+t%10;
t/=10;
}
return m;
} #include <stdio.h>
#include <math.h>
//判断是否为回文数
int issushu(long long n)
{
int i = 0;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0)return 0;
}
return 1;
}
int main() {
//初始化数据
int n = 0, len = 1;
long long num, sum = 0;
scanf("%lld", &num);
long long tmp = num;
//将输入数据倒置,获取后半段数字
while (tmp > 0) {
n = n * 10 + tmp % 10;
len *= 10;
tmp /= 10;
}
len /= 10;//除掉倒置数据的开头一维
sum = num * len + n % len;//前半段和后半段结合
if (issushu(sum)) printf("prime");
else printf("noprime");
return 0;
}