用随机函数产生200个四位数整数,求满足千位、百位、十位、个位之和为素数的个数。

用随机函数产生200个四位数整数,求满足千位、百位、十位、个位之和为素数的个数。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int sushu(int a){
    int i,flag = 1;//默认a是素数
    for(i=2;i<a;i++){
        if(a % i == 0){
            flag = 0;//表示a不是素数 
            break;
        }
    } 
    return flag;
}

int main()
{
    int i,a,cnt=0;
    int b,c,d,f;
    int arr[200],t[200];
    srand(time(NULL));
    for(i=0;i<200;i++)
    {  
        a = rand()%8999+1000;
        arr[i] = a;
        
        b = a/1000;
        c = a/100%10;
        d = a/10%10;
        f = a%10;
        
        //个位数之和
        t[i] = b+c+d+f;
        if(sushu(t[i])){
            cnt++;
            printf("%d\t",t[i]);
        }
    }
    printf("\n素数的个数是%d",cnt);
    return 0;
}

分别分解出四个位求和,然后整个素数判断函数

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int isprime(int n)
{
    int i;
    if(n<=1)
        return 0;
    for(i=2;i*i<=n;i++)
        if(n%i==0)
            return 0;
    return 1;
}
int main()
{
    int i,n,a,b,c,d,count=0;
    srand(time(NULL));
    for(i=0;i<200;i++)
    {  
        n = rand()%9000+1000;
        a = n%10;
        b = n/10%10;
        c = n/100%10;
        d = n/1000;
        if(isprime(a+b+c+d))
            count++;
    }
    printf("%d",count);
    return 0;
}

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    int i,n,j,s;
    int cnt = 0;
    srand((unsigned int)time(NULL));
    i=0;
    while(i<200)
    {
        n = rand()%1000+(rand()%9+1)*1000; //生成随机四位数
        s=0;
        //求各位数字置和
        while(n)
        {
            s += n%10;
            n/=10;
        }
        for(j=2;j<s;j++)
        {
            if(s%j==0)
                break;
        }
        if(j==s)
            cnt++;

        i++;
    }
    printf("%d",cnt);
    return 0;
}