请问我写的代码有什么问题,为什么是错的,要怎么改正

一个四位正整数,满足如下条件:
由数字1到数字9组成;各位数字都不相同;
从左至右数字降序排列;
并且相邻的两个数字前一个不能是后一个的倍数;
并且这4位数字不能都是奇数,也不能都是偶数。
编程输入两个4位整数a和b,输出区间[a,b]之间符合上述条件的所有数。
输入样例:
5000 7000
输出样例:
5432
6432
6532
6543
我写的代码

#include <stdio.h>

#include <stdio.h>

int main() {
    int a, b, i, m, n, p, q, t, isprem;
    scanf("%d%d", &a, &b);
    for (i = a; i <= b; i++) {
        m = i / 1000;
        n = i / 100 % 10;
        p = i % 100 / 10;
        q = i % 10;
        if ((m % 2 == 0 && n % 2 == 0 && p % 2 == 0 && q % 2 == 0 ) || (m % 2 != 0 && n % 2 != 0 && p % 2 != 0 && q % 2 != 0))
            isprem = 0;
        else
            isprem = 1;
        if (isprem = 1) {
            if (m % n != 0 && n % p != 0 && p % q != 0) {

                printf("%d%d%d%d\n", m, n, p, q);

            }
        }
    }
}



  1. 没有判断全部为奇数的情况
  2. 前一个数不是后一个数的倍数,应该用 m % n,后面也是一样
  3. 17行开始后的 if 语句不应该交换数字,因为你是一个一个数字开始判断的
  4. 加上每位数字都不同的判断
#include<stdio.h>
int main() {
    int a,b,c,d;
    int m,n;
    scanf("%d %d",&m,&n);
    if(m>1000&&n>5000&&m<n) {
        int z=m/1000,y=n/1000;
        for(a=z; a<y; a++)
            for(b=2; b<=a-1; b++)
                for(c=2; c<=b-1; c++)
                    for(d=2; d<=c-1; d++)
                        if(a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d)  //由数字1到数字9组成;各位数字都不相同
                            if(a%b!=0&&b%c!=0&&c%d!=0)//相邻的两个数字前一个不能是后一个的倍数
                                if((a%2==0&&b%2==0&&c%2==0&&d%2==0)||(a%2!=0&&b%2!=0&&c%2!=0&&d%2!=0)) {
                                //4位数字不能都是奇数,也不能都是偶数
                                } else {
                                    int num=a*1000+b*100+c*10+b;
                                    if(num>m&&num<n)printf("%d%d%d%d\t",a,b,c,d);
                                }
    }
    return 0;
}