C语言求所有各位数之和为质数的三位数


#include <stdio.h>
#include <stdlib.h>
int main(){
    int n,sum,i,W=1;
    for(n=100;n<1000;n++){
        sum=n%10+(int)(n/10)%10+(int)(n/100)%10;

        if(sum==1)
            sum=sum;
        else if(sum==2)
            printf("%d\n",n);
        else{
            for(i=2;i<=sqrt(sum);i++){
                if(sum%i==0){
                    W=0;
                    break;}
            }
            if(W){  printf("%d\n",n);W=1;}
        }
    }
    return 0;
}

为什么我的这串代码只有
101
102
110
200
这4个结果呢,我看不出来这算法有什么问题

修改见注释处,供参考:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>  //修改
int main(){
    int n,sum,i,W=1;
    for(n=100;n<1000;n++){
        sum=n%10+(int)(n/10)%10+(int)(n/100);//修改
        if(sum==1)
            sum=sum;
        else if(sum==2)
            printf("%d\n",n);
        else{
            for(i=2,W=1;i<=sqrt(sum);i++){ //修改
                if(sum%i==0){
                    W=0;
                    break;}
            }
            if(W){printf("%d\n",n);}  //修改
        }
    }
    return 0;
}