私は、英国の情報学オリンピックの質問1(2012)をcで解決するためのコードをいくつか作成しました。それが誰かの助けになるか、おそらく興味があるなら、プログラムは数のユニークな素因数の積を見つけます。数が素数の場合、元の数を返します。
1 000 000の入力まで動作するはずであり、LinuxおよびMacでコンパイルすると動作します。
何らかの理由で(mingwコンパイラを使用して)Windowsでコンパイルすると、520558を超える入力では機能しません。
おそらく520558整数の長さの配列の宣言と関係がありますが、それを修正する方法がわかりません。
どんな助けでも大歓迎です
ありがとう。
コード:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]){
printf("Please enter your input: ");
int input;
scanf("%d",&input);
int numbers[input-2];
for (int i=0;i<input-2;i++) {
numbers[i] = i+2;
}
for (int i=0;i<input-2;i++) {
if(numbers[i] == 0) {
continue;
}else{
for (int j=(i+2)*2;j<input;j+=numbers[i]){
numbers[j-2] = 0;
}
}
}
int product = 1;
for (int i=0;i<input-2;i++) {
if(numbers[i]!=0){
if(input%numbers[i]==0) {
product *= numbers[i];
}
}
}
if(product == 1){
printf("%u",input);
}else{
printf("%u",product);
}
printf("\n");
// Get rid of this on mac and linuxs
system("PAUSE");
return 0;
}