

RSA暗号の暗号化のプログラムを作っている途中なのですが、if文の `gcd==1`
のところがeを適切な値で入力しても真になりません。fとeの最大公約数を1にしたいプログラムです

[code]

    #include<stdio.h>
    #include<math.h>
    
    int gcd(int f,int e){
    
      int r;
    
      while(r!=0){
        r=f%e;
        f=e;
        e=r;
      }
    
      return f;
    
    }
    
    int main(void){
    
    int hirabun;
    int p;
    int q;
    int flag=0;
    int i;
    int n;
    int e;
    int f;
    int r;
    
    printf("平文となる数字を入力してください:");
    scanf("%d",&hirabun);
    printf("pを入力してください:");
    scanf("%d",&p);
    printf("qを入力してください:");
    scanf("%d",&q);
    for( i=2;i<p;++i ) {
       if( p%i==0 ) {
         flag = 1;
         break;
       }
     }
    
     if( flag==0 )
       printf("%d は素数です。\n",p);
     else
       printf("%d は素数ではありません。\n",p);
    
    // return 0;
    
     for( i=2;i<q;++i ) {
        if( q%i==0 ) {
          flag = 1;
          break;
        }
      }
    
      if( flag==0 )
        printf("%d は素数です。\n",q);
      else
        printf("%d は素数ではありません。\n",q);
    
    
    
      n=p*q;
      f=(p-1)*(q-1);
    
    
    
      printf("gcd(f,e)=1となるeを入力してください:");
      scanf ("%d",&e);
      if(gcd(f,e)==1)
       printf("gcd(f,e)=1です\n");
      else
       printf("違います");
       return 0;
    
      printf("eの値は%dです",e);
      printf("%d",gcd(f,e));
    
    }
    
[/code]


CC BY-SA 4.0
2020-05-02T16:04:42.210
66219
2020-05-02T16:46:59.517
2020-05-02T16:46:59.517
19110
39787
question
c
if文のgcd==1のところがeを適切な値で入力しても真になりません


`gcd()`の`r`が未初期化であることが原因ですね。  
`r`を0以外の値で初期化しないと`while(r!=0)`の処理が実行されません。

問題のコードをq.cに書いてコンパイルしたところ(clang -Wall q.c)、警告が出ていました。

警告を含め、クリーンコンパイルを心掛けることをお勧めします。

【コンパイル結果】

[code]

    q.c:6:7: warning: variable 'r' is used uninitialized whenever function 'gcd' is called [-Wsometimes-uninitialized]
      int r;
      ~~~~^
    q.c:8:9: note: uninitialized use occurs here
      while(r!=0){
            ^
    q.c:6:8: note: initialize the variable 'r' to silence this warning
      int r;
           ^
            = 0
    q.c:28:5: warning: unused variable 'r' [-Wunused-variable]
    int r;
        ^
    2 warnings generated.
    
[/code]


CC BY-SA 4.0
2020-05-02T16:29:36.673
66220
2020-05-02T16:29:36.673
35558
66219
answer