首页 > 试题广场 >

神奇数

[编程题]神奇数
  • 热度指数:3276 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给出一个区间[a, b],计算区间内“神奇数”的个数。
神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。

输入描述:
输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。


输出描述:
输出为一个整数,表示区间内满足条件的整数个数
示例1

输入

11 20

输出

6
import java.util.*;
	public class Main {
	    public static void main(String[] args) {
	        Scanner in = new Scanner(System.in);
	        int begin = in.nextInt();
	        int end = in.nextInt();
	        if(end < 10) {
                in.close();
                System.out.println("count= " + 0);
	            return;
	        }
	        int count = 0;
	        for(int m=begin; m<=end; m++) {
	            int num = m;
	            boolean isMagic = false;
	            ArrayList<Integer> a = new ArrayList<>();
	            while(num != 0) {
	                a.add(num % 10);
	                num /= 10;
	            }
	            for(int i=0; i<a.size(); i++) {
	                if(a.get(i) == 0) {
	                    continue;
	                }
	                for(int j=0; j<a.size(); j++) {
	                    if(i == j) {
	                        continue;
	                    }
	                    int tmp = a.get(i) * 10 + a.get(j);
	                    if(isPrime(tmp)) {
	                        isMagic = true;
	                        break;
	                    }
	                }
	                if(isMagic) {
	                    count ++;
	                    break;
	                }
	            }
	        }
	        System.out.println(count);
            in.close();
	    }
	    public static boolean isPrime(int n) {
	        int i = 2;
	        while(i<n && (n%i != 0)) {
	            i++;
	        }
	        return i == n;
	    }
	}

编辑于 2017-06-06 23:26:22 回复(5)
var readline = require('readline');
var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
var arr = [];
rl.on('line', function (line) {
    arr = line.split(" ");
    rl.close();
});
function test(arr) {
    var a = parseInt(arr[0]);
    var b = parseInt(arr[1]);
    var count =0;
    function iszhishu(arg) {
        var flag =true;
        var gra =parseInt(arg.toString().split("").reverse().join(""));
        for(var i =2;i < Math.floor(arg /2); i++) {
            if(arg % i ==0) {
              flag =false;
            }
        }
        if(!flag){
            flag =true;
            for(var i =2; i < Math.floor(gra /2); i++) {
                if(gra % i ==0) {
                    flag =false;
                }
            }
  }
  return flag?1:0;
    }
    for(var j = a; j <=b; j++) {
        var sum =0;
        var arr1 = j.toString().split("");
        for(var k =0; k < arr1.length; k++) {
            for(var m = arr1.length -1; m > k; m--) {
                var arr2 = [arr1[k], arr1[m]];
                var num = parseInt(arr2.join(""));
                if(iszhishu(num)&&num%10!=0&&num>10){
                    sum=1;
                    break;
                }
            }
        }
        count+=sum;
    }
    return count;
}
rl.on('close', function () {
    console.log(test(arr));
    process.exit(0);
});

发表于 2017-05-20 21:16:43 回复(0)
function countNum(a, b) {
   var num = [];
   for(var i = a+1; i < b; i++) {
     i.toString().split('').map((v, j) => {
       i.toString().split('').map((val, o) => {
         if (j!==o) {
           var k = v + val, t=0;
           for(var w = 1; w <= k; w++) {
             if (k%w === 0) {
               t++;
             }
           }
           if (t === 2 && k >10) {
             num.push(i);
           }
         }
       })
     })
   }
   return num.filter((x, i, s) => x && s.indexOf(x) === i).length;
 }
代码一直过不了,我也不知道为什么

发表于 2017-06-05 15:00:28 回复(3)
先求11到99所有质数,存于列表
第一个循环从a到b,将数字 I 转换成字符串S
第二个循环将质数列表每个元素拆成两个字符C1和C2,通过字符串S的indexOf查找C1和C2,如果查找得到即为神奇数
值得注意地方质数中有11这种C1==C2的数字,处理下即可。
import java.util.*;
 
public class Main{
     
    public static void main(String[] args){
        List<Integer>list = new ArrayList<Integer>();
        for(int i=11;i<100;i++){
            boolean isPrime = true;
            for(int j=2;j<=Math.sqrt(i);j++){
                if(i%j==0){
                    isPrime = false;
                    break;
                }
            }
            if(isPrime) list.add(i);
        }
         Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int cnt = 0;
        for(int i=a;i<=b;i++){
            String s = String.valueOf(i);
            for(Integer e: list){
                String s1 = String.valueOf(e/10);
                String s2 = String.valueOf(e%10);
                if(!s1.equals(s2)){
                    if(s.indexOf(s1)!=-1&&s.indexOf(s2)!=-1){
                        cnt++;
                        break;
                    }
                }else{
                    int index = s.indexOf(s1);
                    if(index!=-1&&s.indexOf(s2, index+1)!=-1){
                        cnt++;
                        break;
                    }
                }
            }
        }
        System.out.println(cnt);
    }
}

发表于 2017-06-08 17:09:37 回复(1)
#include<iostream>
#include<math.h>
using namespace std;

bool isPrime(int x)
{
for (int i = 2; i <= sqrt(x); i++)
{
if (x != 2 && x%i == 0)
return false;
}
return true;
}

bool isShenQi(int x)
{
int N, numb[10];
for (N = 0; x; N++)
{
numb[N] = x % 10;
x /= 10;
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (i == j)
continue;
if (numb[i] != 0 && isPrime(numb[i] * 10 + numb[j]))
return true;
}
}
return false;
}

int main()
{
int a, b;
cin >> a >> b;
int n = 0;
for (int i = a; i <= b; i++)
{
if (isShenQi(i))
n++;
}
cout << n << endl;
return 0;
}
发表于 2017-06-22 11:43:11 回复(1)
//注意必须要两位数,而且本身是质数也不算神奇数

#include <iostream>
#include<string>
#include<math.h>
#include<algorithm>
using namespace std;
//

bool Is_sume(int a) {
    if (a < 2) return false;
    for (int x = 2 ; x <= sqrt(a); ++x) {
        if (a % x == 0) return false;
    }
    return true;

}
int transit(int a) {
    string str = to_string(a);
    for (int x = 0 ; x < str.size(); ++x) {
        for (int y = 0; y < str.size(); ++y) {
            if (x != y && str[x] != '0') {
                string ret ;
                ret += str[x];
                ret += str[y];
                int s;
                s = (int)stoi(ret);
                //  cout<<s<<endl;
                if (Is_sume(s)) {
                //    cout << s << endl;
                    return 1;
                }
            }
        }
    }

    return 0;
}
int main(void) {
    int count = 0;
    int a, b;
    cin >> a >> b;

    for (int x = max(a, 10); x <= b; ++x) {
            count += transit(x);
        }

    cout << count;
}
// 64 位输出请用 printf("%lld")

发表于 2024-05-05 13:54:21 回复(0)
数据范围太小了,直接遍历区间中所有数,对于某个数,穷举两个不同的数位,看能不能构建出两位的质数即可。两位质数不多,可以预处理出来,判断时直接查表。
#include <bits/stdc++.h>
using namespace std;

bool is_prime[100];

bool check(int x) {
    string s = to_string(x);
    for(int i = 0; i < s.size(); i++) {
        for(int j = 0; j < s.size(); j++) {
            if(s[i] == '0' || i == j) continue;
            int num = 10*(s[i] - '0') + (s[j] - '0');
            if(is_prime[num]) return true;
        }
    }
    return false;
}

int main() {
    is_prime[11] = is_prime[13] = is_prime[17] = is_prime[19] = is_prime[23] = is_prime[29] = is_prime[31] = is_prime[37] = is_prime[41] = is_prime[43] = is_prime[47] = is_prime[53] = is_prime[59] = is_prime[61] = is_prime[67] = is_prime[73] = is_prime[79] = is_prime[83] = is_prime[89] = is_prime[91] = is_prime[97] = true;
    int a, b;
    cin >> a >> b;
    int ans = 0;
    for(int x = a; x <= b; x++) {
        if(x < 10) continue;
        ans += check(x);
    }
    cout << ans << endl;
    return 0;
}

发表于 2023-02-02 17:42:46 回复(0)

思路

枚举这个区间内的所有整数x,然后将x转成字符串做全排列,取2个字符组合得到整数y,如果y是质数,它就是神奇数,计数器++。

因为是全排列,所以不论整数有多少位,只要取前两个数字就能保证取到所有情况,使用stoi函数,顺便处理了前导0的情况。

代码

#include <bits/stdc++.h>
using namespace std;

bool is(int x)
{
    for (int i = 2; i <= sqrt(x); i++)
        if (x % i == 0) return false;
    return true;
}

bool check(string& s)
{
    do
    {
        string t;
        t.push_back(s[0]);
        t.push_back(s[1]);
        if (is(stoi(t)) && stoi(t) >= 11) return true;
    } while (next_permutation(s.begin(), s.end()));
    return false;
}

int main()
{
    int a, b;
    cin >> a >> b;
    int res = 0;
    for (int i = a; i <= b; i++)
    {
        string s = to_string(i);
        sort(s.begin(), s.end());
        if (check(s)) res++;
    }
    cout << res << endl;
    return 0;
}
  • 时间复杂度:范围内整数的个数。

反思:考试时这道题没有通过,主要有两个原因。

  1. 使用next_permutation()函数之前要对字符串做排序,确保从最小的排列开始,从而生成所有可能的排列组合。否则会漏掉一些情况,这是我之前不知道的。
  2. stoi(t) >= 11保证了组合数t的2位数都不是0,这样才符合题意。

这道题处理的质数范围是2位数的,所以可以将2位数的质数放在表中,这样就可以直接查表判断质数了。另外判断素数的函数首先要判断x<2的情况,这道题因为x一定是2位数的,所以就没有写。

发表于 2024-07-25 21:44:03 回复(0)
#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
bool isPrime(int n)
{
    if(n<11)
        return false;
    for(int i=2; i<=sqrt(n); i++)
        if(n%i==0)
            return false;
    return true;
}
bool isMagic(int n)
{
    if(n<11)
        return false;
    vector<int> v;
    while(n)
    {
        v.push_back(n%10);
        n/=10;
    }
    for(int i=0; i<v.size()-1; i++)
        for(int j=i+1; j<v.size(); j++)
            if(isPrime(v[i]*10+v[j])||isPrime(v[j]*10+v[i]))
                return true;
    return false;
}
int main()
{
    int a,b;
    cin>>a>>b;
    int sum=0;
    for(int i=a; i<=b; i++)
        if(isMagic(i))
            sum++;
    cout<<sum<<endl;
    return 0;
}

发表于 2021-08-12 18:13:52 回复(0)
def text():
    li = list(map(int,input().split()))
    j = 1
    zhi = [11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,91,97]
    b = {}
    for z in range(int(li[0]),int(li[-1])+1):
        new_li = list(str(z))
        a = []
        for i in range(len(new_li)):
            for l in range(j,len(new_li)):
                if i == l:
                    continue
                a.append(new_li[i]+new_li[l])
                j = 0
        for i in set(a):
            if int(i) in zhi:
                b[z] = 1
    print(len(b))
text()

发表于 2021-07-31 01:06:33 回复(0)
while(line=readline()){
    var lines = line.split(" ");
    var a = parseInt(lines[0]);
    var b = parseInt(lines[1]);
     
    print(qujian(a,b));
}
function qujian(a,b){
    var count =0;
    for(var i=a;i<=b;i++){
        if(level(i)){
            ++count
        }
    }
    return count
}
function level(n){
    var strN = n.toString()
    var len = strN.length
    if(len==1){
        return false
    }
    for(var i=0;i<len;i++){
        for(var j=0;j<len;j++){
            if(j==i){
                continue
            }
            if(strN[i] ==0){
                continue
            }
            var newStr=strN[i]+strN[j]
            var numStr= parseInt(newStr)
            if(checkNum(numStr)){
                return true
            }
            else{
                continue
            }
                 
        }
    }
    return false
}
function checkNum(n){
    for(var i=2;i<=Math.sqrt(n);i++){
        if(n%i==0){
            return false
        }
    }
    return true
}

发表于 2020-03-05 16:49:39 回复(0)
#include<iostream>
#include<math.h>
#include <sstream>
#include <cstring>

bool IS_Prime(const int num)
{
    //1 is not prime
    if(num == 1) return false;
    
    int i = 2;
    while( i * i <= num)
    {
        if(num % i == 0)
            return false;
        i += 1;
    }
    return  true;
}

bool GetNum_OF_Prime(unsigned int num,unsigned int * numb,int size)
{
    memset(numb,0,size * sizeof(unsigned int));
   
    unsigned int N;
    for (N = 0; num; N++)
    {
        numb[N] = num % 10;
        num /= 10;
    }
    
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            if (i == j)continue;
            if (numb[i] != 0 && IS_Prime(numb[i] * 10 + numb[j]))
                return true;
        }
    }
    return false;
}

int main(int argc, const char * argv[])
{
    unsigned int a, b;
    while(std::cin >> a >> b)
    {
        std::stringstream ss;
        ss << b;
        int max_num_len = ss.str().length(); //get the max num length for the arr  lenght
        unsigned int * arr = new unsigned int [max_num_len];
        
        unsigned int prime_count = 0;
        for (unsigned int i = a; i <= b; i++)
        {
            if (GetNum_OF_Prime(i,arr,max_num_len))
                prime_count++;
        }
        delete [] arr;
        std::cout << prime_count << std::endl;
    }

    return 0;
}


发表于 2018-11-17 15:26:01 回复(0)
public class Main2 {

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int count=0;
        for(int i=a;i<=b;i++){
            if(isMiracle(i))
                count++;
        }
        
        System.out.println(count);
        scanner.close();
        
    }
    
    public static boolean isMiracle(int n) {
        List<Integer> list = new ArrayList<Integer>();
        while(n!=0){
            if(n%10!=0)
                list.add(n%10);
            n/=10;
        }
    
        if(list.size()<2)
            return false;
        
        for(int i=0;i<list.size();i++){
            for(int j=0;j<list.size();j++){
                if(i==j)
                    continue;
                n=list.get(i)*10+list.get(j);
                if(isPrime(n)){
                    return true;
                }
                    
            }
            
        }
        
        return false;
    }

    public static boolean isPrime(int n){
        
        for(int i=2;i<n;i++){
            if(n%i==0)
                return false;
        }
        
        return true;
    }
}
发表于 2018-05-15 10:41:18 回复(0)
import java.util.Scanner;

/*
 * 想不到更好的办法只能暴力求解了,遍历[a,b]中每个数,然后任取两位判断组成的二位数是否是质数
 * */
public class ShenQi {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();

            int count = 0;
            for (int i = a; i <= b; i++) {
//                通过字符转换
                String tmp = i + "";
                boolean flag = false;
//                任意取两位
                for (int j = 0; j < tmp.length() - 1; j++) {
                    for (int k = j + 1; k < tmp.length(); k++) {
                        int first = (tmp.charAt(j) - '0') * 10 + tmp.charAt(k) - '0';
//                        必须构成二位数
                        if (first > 10 && isPrime(first)) {
                            count++;
                            flag = true;
                        } else {
                            int second = (tmp.charAt(k) - '0') * 10 + tmp.charAt(j) - '0';
                            if (second > 10 && isPrime(second)) {
                                count++;
                                flag = true;
                            }
                        }
//                        符合条件直接跳出
                        if (flag) {
                            break;
                        }
                    }
                    if (flag) {
                        break;
                    }
                }
            }
            System.out.println(count);
        }
    }

    private static boolean isPrime(int n) {
        for (int i = 2; i <= (int) Math.sqrt(n); i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}
发表于 2018-04-05 17:12:57 回复(0)
importjava.util.Scanner;
importjava.util.ArrayList;
publicclassMain{
      publicstaticvoidmain(String args[]){
        Scanner scan =newScanner(System.in);
         
        inta = scan.nextInt();
        intb = scan.nextInt();
         
        //先求10到100以内所有的质素:
        ArrayList<String> list =newArrayList<String>();
        for(inti=11;i<100;i++){
            if(isPrime(i)){
                list.add(i+"");
            }
        }
        //System.out.println(list);
        //再求a到b区间的数字是否包含list里每个字符串的字符
        intcount =0;
        for(inti=a; i<=b; i++){
            for(String s:list){
                if((i+"").matches(s.charAt(0)+"[0-9]*"+s.charAt(1)) ||
                        (i+"").matches(s.charAt(1)+"[0-9]*"+s.charAt(0))){
                    //System.out.println(i+":"+s);
                    count++;
                    break;
                }
            }
        }
        System.out.println(count);
    }
    publicstaticbooleanisPrime(intnumber){
        for(inti=2;i*i<=number;i++){
            if(number % i ==0)return false;
        }
        returntrue;
    }
}

各位。能不能帮我我看看我这样写为什么是错的?实在没看出来。。。
发表于 2018-03-24 13:03:38 回复(0)
 
<?php
$str=trim(fgets(STDIN));
$array= explode(" ",$str);
$m= 0;$aa=0;$kk=0;
for($i= $array[0]; $i<= $array[1]; $i++) {
    $a= str_split($i);
    foreach($aas$k=>$v){
        if($v== 0) continue;
        foreach($aas$key=>$value){
            if($key== $k) continue;
            $kk= 0;
            for($j= 1; $j< $v*10+$value; $j++) {
                if( ($v*10+$value) % $j== 0 ) {
                    $kk++;
                }
                if($kk> 1) break;
            }
            if($kk== 1) {
                $m++;break;
            }
        }
        if($kk== 1)break;
    }
}
echo$m;
?>

发表于 2018-03-22 17:02:13 回复(0)
pyhon3 ,强烈推荐itertools.combinations import itertools
a, b = map(int, input().split())
# 生成所有的两位质数
zs = [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
# 求得满足条件的神奇数
num = 0
for i in range(a, b + 1):  # i=15
    tt = list(str(i))
    for item in itertools.combinations(tt, 2):
        tep = [int("".join(item)), int("".join(item[::-1]))]
        for j in tep:
            if j in zs and j >= 10:
                num+=1
                break
        else:
            continue
        break
print(num)

发表于 2017-12-09 01:31:37 回复(0)
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        List<Integer> primeList=new ArrayList<Integer>();
        for(int i=11;i<100;i++)
        {
            boolean isPrime=true;
            for(int j=2;j<=Math.sqrt(i);j++)
            {
                if(i%j==0)
                {
                    isPrime=false;
                    break;
                }
            }
            if(isPrime)
            {
                primeList.add(i);
            }
        }

        Scanner scanner=new Scanner(System.in);
        int start=scanner.nextInt();
        int end=scanner.nextInt();
        int count=0;
        loop1: for(int num=start;num<=end;num++)
        {
            String numStr=String.valueOf(num);
            for(int primeNum:primeList)
            {
                String primeStr=String.valueOf(primeNum);
                if(isComContain(primeStr, numStr))//这个数包含质数的每一位
                {
                    count++;//这个数是神奇数
                    continue loop1;
                }
            }
        }
        System.out.println(count);
    }

    /**
     * 判断parent是否包含child中的每一个字符。注意:“132”不包含“11”
     * @param child
     * @param parent
     * @return
     */
    public static boolean isComContain(String child,String parent)
    {
        for(int i=0;i<child.length();i++)
        {
            String childTmp=child.substring(i,i+1);
            if(!parent.contains(childTmp))
            {
                return false;
            }
            parent=parent.replaceFirst(childTmp, "");
        }

        return true;
    }
}
发表于 2017-10-27 13:42:12 回复(0)
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;

static int length = 0;
int arr[4] = {2, 3, 5, 7};

bool isPrime(int n) {
    if (n < 10) {
        return false;
    }
    for (int i = 0; i < 4; i++) {
        if (n % arr[i] == 0) {
            return false;
        }
    }
    return true;
}

int checkBit(int n) {
    int i = 0;
    while (n != 0) {
        n /= 10;
        i++;
    }
    return i;
}

//合并字符数组中相同的字符,并同时去掉‘0’
char* combSameCh(char* ch, int len) {
    int i = 0;
    while (i < len - 1) {
        if (ch[i] == ch[i + 1] && ch[i] != '1') {
            for (int j = i; j < len - 1; j++) {
                ch[j] = ch[j + 1];
            }
            len--;
        }
        i++;
    }
    i = 0;
    while (i < len) {
        if (ch[i] == '0') {
            for (int j = i; j < len - 1; j++) {
                ch[j] = ch[j + 1];
            }
            len--;
        }
        i++;
    }
    length = len;
    return ch;
}

int main(int argc, const char * argv[]) {
    int a, b, result = 0;
    cin >> a >> b;
    for (int i = a; i <= b ; i++) {
        char numCh[10];
        sprintf(numCh, "%d", i);
        sort(numCh, numCh + checkBit(i));
        char *temp = combSameCh(numCh, checkBit(i));
        strcpy(numCh, temp);    //很无奈,直接给temp会报错。char[]赋给char*没问题,反之就报错。
        bool isMagic = false;
        for (int j = 0; j < length - 1; j++) {
            for (int k = j + 1; k < length; k++) {
                int num1 = (int)(numCh[j] - '0');
                int num2 = (int)(numCh[k] - '0');
                int cond1 = num1 * 10 + num2;
                int cond2 = num2 * 10 + num1;
                if (isPrime(cond1) || isPrime(cond2)) {
                    result++;
                    isMagic = true;
                    break;
                }
            }
            if (isMagic) {
                break;
            }
        }
    }
    cout << result;
    return 0;
}
发表于 2017-10-20 03:45:25 回复(0)
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Scanner;
 
publicclassMain{
    publicstaticvoidmain(String args[]){
        Scanner input = newScanner(System.in) ;
        intbegin = input.nextInt() , end = input.nextInt() , sum = 0;
        if(end < 10){
            System.out.println(0);
            return;
        }
        for(inti = begin ; i <= end ; i++){
            if(isMagic(i)){
                sum ++ ;
            }
        }
        input.close();
        System.out.println(sum);
    }
     
    publicstaticbooleanisMagic(intnum){
        List<Integer> arr = newArrayList<Integer>() ;
        while(num > 0){      //分解数字,把各个位数的数字存到Arraylist中
            arr.add(num % 10) ;
            num /= 10;
        }
        booleanflag = false;
        //遍历两遍list表
        for(inti = 0; i < arr.size() ; i ++){ 
            booleanbreaks = false;
            if(arr.get(i) == 0){
                continue;
            }
            for(intj = 0; j < arr.size() ; j ++){
                if(i == j){
                    continue;
                }
                inttemp = arr.get(i) * 10+ arr.get(j) ;
                if(isPrime(temp)){
                    flag = true;       //该数字是神奇数
                    breaks = true;     //跳出外层循环的标志
                    break;             //跳出内层循环
                }
            }
            if(breaks){
                break;
            }
        }
        returnflag ;
    }
 
    publicstaticbooleanisPrime(intnum){
        booleanflag = true;
        for(inti = 2; i <= Math.sqrt(num) ; i++){
            if(num % i == 0){
                flag = false;
                break;
            }
        }
        returnflag ;
    }
}
发表于 2017-10-18 21:02:38 回复(0)

热门推荐

通过挑战的用户

神奇数