C、91 102バイト、修正(再度)、ゴルフ、そして今回のテスト:
<strike>s(c){p,f,d;for(p=2,f=d=0;p<c&&!d;){if(c%p==0){c/=p;++f;if(c%p==0)d=1;}++p;}c==p&&f==2&&!d;}</strike>
s(c){int p,f,d;for(p=2,f=d=0;p<c&&!d;){if(c%p==0){c/=p;++f;if(c%p==0)d=1;}++p;}return c==p&&f==2&&!d;}
/ *これも93バイトで機能しますが、ダイナミック変数のデフォルトのint型を禁止する標準的なルールと、割り当てなしで暗黙的な戻り値を許可しないことを忘れてしまったので、取りません。
p,f,d;s(c){for(p=2,f=d=0;p<c&&!d;){if(c%p==0){c/=p;++f;if(c%p==0)d=1;}++p;}p=c==p&&f==2&&!d;}
(Cについて何か知っていると言ったのは誰ですか?
コメントにシェルスクリプトを含むテストフレームを次に示します。
/* betseg's program for sphenic numbers from
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <math.h> /* compile with -lm */
/* l,j;a(i){for(l=1,j=0;l<i;i%++l?:(i/=l,j++));l=i==1&&j==3;} */
#if defined GOLFED
l,j;a(i){for(l=1,j=0;l++<i;fmod((float)i/l,l)?i%l?:(i/=l,j++):(j=9));l=i==1&&j==3;}
#else
int looker, jcount;
int a( intval ) {
for( looker = 1, jcount = 0;
looker++ < intval;
/* Watch odd intvals and even lookers, as well. */
fmod( (float)intval/looker, looker )
? intval % looker /* remainder? */
? 0 /* dummy value */
: ( inval /= looker, jcount++ /* reduce the parameter, count factors */ )
: ( jcount = 9 /* kill the count */ )
)
/* empty loop */;
looker = intval == 1 && jcount == 3; /* reusue looker for implicit return value */
}
#endif
/* for (( i=0; $i < 100; i = $i + 1 )) ; do echo -n at $i; ./sphenic $i ; done */
私は自分のバージョンを取得するために、betsegの以前の回答を借りました。
これは私のバージョンのbetsegのアルゴリズムで、解決策を見つけるためにゴルフをしました:
/* betseg's repaired program for sphenic numbers
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int sphenic( int candidate )
{
int probe, found, dups;
for( probe = 2, found = dups = 0; probe < candidate && !dups; /* empty update */ )
{
int remainder = candidate % probe;
if ( remainder == 0 )
{
candidate /= probe;
++found;
if ( ( candidate % probe ) == 0 )
dups = 1;
}
++probe;
}
return ( candidate == probe ) && ( found == 2 ) && !dups;
}
int main( int argc, char * argv[] ) { /* Make it command-line callable: */
int parameter;
if ( ( argc > 1 )
&& ( ( parameter = (int) strtoul( argv[ 1 ], NULL, 0 ) ) < ULONG_MAX ) ) {
puts( sphenic( parameter ) ? "true" : "false" );
}
return EXIT_SUCCESS;
}
/* for (( i=0; $i < 100; i = $i + 1 )) ; do echo -n at $i; ./sphenic $i ; done */
60
楔数?2 × 2 × 3 × 5