burdan yazıyorum deneme yapmadım: sadece nested loop ile yaptım fonksyion kullanmaya izin varsa çok daha kolay olur asal sayıları bulmak:
girilen sayi a olsun:

int a = 121;

int asal = 1;
int yAsal = 0;
int d;
int i;
for(i = 2; i<(a+1)/2;i++){//sayının yarısına kadar olan tam bölenlere bakıyoruz, en küçük asal: 2
 if(a%i == 0){ // eğer tam bölüyorsa
  for(d=2; d<i;d++){ //bölenin asal olup olmadığına bakıyoruz
     if(i%d == 0){
      asal = 0;//eğer kendisine kadar olan sayılardan herhangi birine tam bölülünüyorsa asal değil
      break;
     }
  }
  if(asal == 1){ // eğer bölen asalsa:
    asal = 1;
    int bolum= a/i;
    for(d=2; d<bolum;d++){ // bölüm ün asal olup olmadığını kontrol ediyoruz
     if(bolum%d == 0){
      asal = 0; // asal değil
      break;
     }
    }
     
    if(asal == 1){ // bölümde asalsa sayı yarı asal
     yAsal = 1;
  }
  }

}
}

if(yAsal == 1){
//sayı yarı asal)
}