首页 > 解决方案 > 输入数的前身有多少是素数?

问题描述

/* 用 C 编程语言编写一个程序,其中从键盘输入两个自然数 K 和 T,K 必须是一位数,T 必须是两位数。对于每一个输入的两位数T,屏幕上显示是否有K个其前任是质数的信息。输入数字的顺序会因输入任何不符合指定条件的值而中断。如果没有输入任何正确的数字对,请在屏幕上写下相应的信息。*/

#include<stdio.h>

int main(void)
{
        int k,t,s=0,i,j,count;
    do
    {
        printf("\nenter one one-digit and one two-digit number.\n");
        scanf("%d%d",&k,&t);
        s++;

        count=0;

        for(i=1; i<=t; i++)
        {
            for(j=2; j<=t/2; j++)
            {
                if(j%i==0)
                count++;
            }
        }

        if(count==k)
        printf("\nentered number %d has %d predecessors which are prime numbers.",t,k);

        else
        printf("\nentered number %d does not have %d predecessors which are prime numbers.",t,k);

    }
    while(k<10 && k>0 && t>9 && t<100);

    if(s==1)
    printf("\nuncorrect pair was entered.");

}

我尝试以这种方式解决它,但代码不起作用,我不知道为什么

预期输出,例如。k=8 和 t=21 输入的数字 21 有 8 个前身,它们是素数。

标签: c

解决方案


替换了你的for

for (i = 2; i <= t; i++) {
        int isPrime = 1;
        for (j = 2; j < t; j++) {
            if (i % j == 0 && i != j) {
                isPrime = 0;
                break;
            }
        }
        if(isPrime)
            count++;
    }

推荐阅读